全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

关于SSH 远程执行命令你要知道的二三事

前言

相信大家在工作的时侯,可能会遇到要利用 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\n"
expect "*$*"
send "command\n"
expect "*$*"
send "exit\n"
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\n"
......

执行本地脚本

对于执行本地脚本,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\n"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "password\n"
expect "*$*"
send "sh shell_script.sh\n"
......

支持执行 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\n"
expect "*100%*"
expect eof

# Execute the shell script at remote host
spawn ssh -o "StrictHostKeyChecking no" username@hostname
expect "*assword*"
send "password\n"
expect "*$*"
send "sudo sh shell_script.sh\n"
expect "*assword*"
send "password\n"
......

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# linux  # ssh远程执行命令  # shell远程执行命令  # ssh  # 远程执行多条命令  # Windows上SSH服务器配置图文教程  # windows 7架设OpenSSH服务器实践  # python通过ssh-powershell监控windows的方法  # Windows系统下安装Python的SSH模块教程  # windows7下安装php的php-ssh2扩展教程  # ssh远程执行命令方法和Shell脚本实例  # ssh自动登录的4种实现方法  # python paramiko实现ssh远程访问的方法  # Python实现建立SSH连接的方法  # 简单架设SSH+Squid代理服务器的自由上网通道的方法  # 关于ssh连不上问题的解决方法(必看)  # SSH框架网上商城项目第30战之项目总结(附源码下载地址)  # SSH+Jquery+Ajax框架整合  # Ubuntu下查看ssh服务是否安装或启动的方法  # ssh连接超时解决方法  # PowerShell小技巧之尝试ssh登录  # shell脚本实现ssh自动登录功能分享  # linux系统下的ssh登录和配置方法  # Linux ssh远程连接断开问题处理办法解决  # python使用paramiko模块实现ssh远程登陆上传文件并执行  # 无需密码通过ssh执行rsync来同步文件的方法  # ubuntu16.04下安装openssh-server报依赖错误的完美解决方法(非常不错)  # windows安装openssh并通过生成SSH密钥登录Linux服务器  # 输入密码  # 多条  # 前先  # 拷贝到  # 是一个  # 多个  # 较高  # 我们可以  # 可以使用  # 这篇文章  # 谢谢大家  # 解决办法  # 有时会  # 为了避免  # 每条  # 时侯  # 自动化控制  # 方中  # 只需用  # 更简便 


相关文章: 如何用花生壳三步快速搭建专属网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何确认建站备案号应放置的具体位置?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何用虚拟主机快速搭建网站?详细步骤解析  简历在线制作网站免费,免费下载个人简历的网站是哪些?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  网站制作公司排行榜,抖音怎样做个人官方网站  大学网站设计制作软件有哪些,如何将网站制作成自己app?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  Python路径拼接规范_跨平台处理说明【指导】  宝塔新建站点为何无法访问?如何排查?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  威客平台建站流程解析:高效搭建教程与设计优化方案  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何快速搭建高效可靠的建站解决方案?  名字制作网站免费,所有小说网站的名字?  建站主机数据库如何配置才能提升网站性能?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在阿里云域名上完成建站全流程?  山东网站制作公司有哪些,山东大源集团官网?  建站之星如何修改网站生成路径?  如何快速搭建高效简练网站?  常州企业建站如何选择最佳模板?  如何将凡科建站内容保存为本地文件?  宁波自助建站系统如何快速打造专业企业网站?  建站之星上传入口如何快速找到?  高防服务器:AI智能防御DDoS攻击与数据安全保障  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  linux top下的 minerd 木马清除方法  ,怎么用自己头像做动态表情包?  网站制作难吗安全吗,做一个网站需要多久时间?  5种Android数据存储方式汇总  建站之星下载版如何获取与安装?  网站制作免费,什么网站能看正片电影?  建站之星后台密码如何安全设置与找回?  制作营销网站公司,淘特是干什么用的?  高端建站如何打造兼具美学与转化的品牌官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  安云自助建站系统如何快速提升SEO排名?  免费网站制作appp,免费制作app哪个平台好?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何快速搭建高效香港服务器网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。