有时侯,利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作。我们希望做到:

免手工输入密码

支持执行多个命令,执行 shell 脚本

支持执行 sudo 的命令

免手工输入密码

我们可以使用 ssh 互信,sshpass 和 expect 等工具来避免手工输密码。使用过程可能会碰到如下需要手工输入 yes 的繁琐场景:

$ ssh username@hostname

The authenticity of host ... can't be established.

ECDSA key fingerprint is ...

Are you sure you want to continue connecting (yes/no)?

为了避免出现上述场景,往 ssh 命令添加如下参数:

$ ssh -o "StrictHostKeyChecking no" username@password

SSH 互信

SSH 互信的配置非常简单,首先生成 ssh key:

$ ssh-keygen

把 public key 拷贝到信任方中:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub username@hostname

之后免密执行命令:

$ ssh -o "StrictHostKeyChecking no" username@password cmd

sshpass

sshpass 是一个用于非交互的 ssh 密码验证工具,使用前先安装:

$ yum install sshpass

例如:

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@hostname cmd

expect

Expect 是用来进行自动化控制和测试的软件工具。虽然学习成本较高,但是 expect 的功能强大,利用 expect 可以方便的执行远程命令。使用前先安装:

$ yum install expect

例如:

#!/usr/bin/expect

spawn ssh -o "StrictHostKeyChecking no" username@hostname

expect "*assword*"

send "password"

expect "*$*"

send "command"

expect "*$*"

send "exit"

expect eof

Expect 不仅支持 ssh,还支持 scp, ftp 等工具。

支持多命令和脚本

执行多条命令

sshpass 和 expect 在支持多条命令上非常类似,只需用 && 连接命令即可:

# ssh trust

$ ssh -o "StrictHostKeyChecking no" username@password "cmd1 && cmd2"

例如:

# sshpass

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "ls -a && mkdir test"

# expect

......

expect "*$*"

send "ls -a && mkdir test"

......

执行本地脚本

对于执行本地脚本,ssh 和 sshpass 的用法类似。

# ssh trust

$ ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

# sshpass

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password bash -s < shell_script.sh

对于 expect,首先需要把脚本拷贝到远程主机,然后在远程主机执行该脚本,步骤如下:

...

# Copy script to remote host

spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/

expect "*assword*"

send "password"

expect "*100%*"

expect eof

# Execute the shell script at remote host

spawn ssh -o "StrictHostKeyChecking no" username@hostname

expect "*assword*"

send "password"

expect "*$*"

send "sh shell_script.sh"

......

支持执行 sudo 命令

有些命令需要 sudo 权限才能执行,但是我们不希望重复的输入密码,我们可以把每条命令修改为如下:

cmd ---> 'echo password | sudo -S cmd'

例如:

sshpass -p password ssh -o "StrictHostKeyChecking no" username@password "echo password | sudo -S mkdir /newdir"

对于如 echo, dd 等部分命令,有时会出现如下失败场景:

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo password | sudo -S echo hello > /newdir/newfile'

bash: /newdir/newfile: 权限不够

解决办法如下:

cmd ---> 'echo password | sudo -S sh -c "cmd"'

# For example

$ sshpass -p password ssh -o "StrictHostKeyChecking no" username@password 'echo WSfdl097018= | sudo -S sh -c "echo hello >  /newdir/newfile"'

如果采用 expect,需要把脚本拷贝到远程主机,然后在远程主机采用 sudo 执行该脚本,相对 sshpass 更简便和健壮:

...

# Copy script to remote host

spawn scp -o "StrictHostKeyChecking no" shell_script.sh username@hostname:~/

expect "*assword*"

send "password"

expect "*100%*"

expect eof

# Execute the shell script at remote host

spawn ssh -o "StrictHostKeyChecking no" username@hostname

expect "*assword*"

send "password"

expect "*$*"

send "sudo sh shell_script.sh"

expect "*assword*"

send "password"

......

ssh远程执行命令 linux,【Linux】SSH 远程执行命令相关推荐

  1. 【linux】ssh 远程执行命令

    1.概述 转载并且补充:ssh 远程执行命令 SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操 ...

  2. Linux之SSH远程执行命令

    注: 部分概念介绍来源于网络 SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h&qu ...

  3. 【Linux】SSH远程执行命令

    注: 部分概念介绍来源于网络 SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h&qu ...

  4. ssh远程执行命令 linux,Linux下使用SSH远程执行命令方法收集

    说明:可以做SSH免密登录之后执行,这样可以省去每次执行输入密码的提示. 对于简单的命令: 如果是简单执行几个命令,则: ssh user@remoteNode "cd /home ; ls ...

  5. Linux之SSH远程执行多条命令

    SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h" 一次执行多条命令,使用 ...

  6. ssh中exit命令退出远程服务器_解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止...

    问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问. 解决方法:使用nohup命令让 ...

  7. Linux用户登录自动拷贝文件,linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录...

    原文出处: http://blog.csdn.net/five3/article/details/8648484 最近需要写一个脚本备份各个服务器上的程序到一个指定服务器上,本来以为查查rsync命令 ...

  8. linux操作系统-SSH原理介绍与免密运用与远程命令操作

    PS:运用好SSH,对管理众多服务器可以带来极大的便利.当我们从一台服务器访问另一台服务器,我们可以输入密码访问,并不影响效率.但是当我们需要访问多台服务器,或者几十上百台的时候就有点麻烦了.或者对几 ...

  9. linux远程连接telnet命令,Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令...

    本节,我们将介绍一些和Linux系统远程登录及通信相关的命令. SSH命令 SSH(Secure Shell即安全的Shell)可以登录和操作远程操作系统,它会建立一个安全的连接,将通信数据进行加密, ...

最新文章

  1. center os7 安装mysql
  2. linux python3安装包_Linux下安装python3及相关包
  3. java对象头_浅谈java对象结构 对象头 Markword
  4. NOIP模拟赛10 题解
  5. 愚蠢的领导才会用程序员祭天!!
  6. Git的基本概念/常用命令及实例
  7. shell的date命令:使用方法,以及小时、分钟的计算
  8. 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...
  9. JS - this,call,apply
  10. 用unity制作能量护盾(2)
  11. 《跨越鸿沟》中的提到的五类用户
  12. 紫外分光光度法测量蛋白质的含量
  13. 个性推荐①——系统总结个性化推荐系统
  14. 计算机在线作业office,全国计算机一级office题库与答案
  15. 蒙德里安的梦想 状态压缩DP (1)
  16. 理财入门:思维转变和资产理解以及财务自由说明。
  17. 离散数学学习笔记-2-群 子群
  18. 程序无法正常启动0xc0000142解决方法
  19. 和风天气API 版本6和版本7
  20. 【实践与问题解决29】苹果系统如何做脚本控制手机自动手势

热门文章

  1. ImageView的scaleType详解
  2. 人工智能能够构建一个自主驱动云吗?
  3. SpringMVC 中设置日期字符串转换格式
  4. Visual Studio 2010快捷键大全
  5. Ubuntu下安装Gerrit
  6. linux sed名宁,Linux shell利用sed批量更改文件名的方法
  7. 工时单位天与人天的区别?
  8. spring框架结构介绍
  9. python爬取内容乱码_python爬取html中文乱码
  10. python torch exp_学习Pytorch过程遇到的坑(持续更新中)