ssh远程执行命令 linux,【Linux】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"
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 远程执行命令相关推荐
- 【linux】ssh 远程执行命令
1.概述 转载并且补充:ssh 远程执行命令 SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操 ...
- Linux之SSH远程执行命令
注: 部分概念介绍来源于网络 SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h&qu ...
- 【Linux】SSH远程执行命令
注: 部分概念介绍来源于网络 SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h&qu ...
- ssh远程执行命令 linux,Linux下使用SSH远程执行命令方法收集
说明:可以做SSH免密登录之后执行,这样可以省去每次执行输入密码的提示. 对于简单的命令: 如果是简单执行几个命令,则: ssh user@remoteNode "cd /home ; ls ...
- Linux之SSH远程执行多条命令
SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作. 一.执行简单的命令: ssh root@127.0.0.1 "df -h" 一次执行多条命令,使用 ...
- ssh中exit命令退出远程服务器_解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止...
问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问. 解决方法:使用nohup命令让 ...
- Linux用户登录自动拷贝文件,linux下ssh远程登录/scp远程复制文件/rsync远程同步命令的自动登录...
原文出处: http://blog.csdn.net/five3/article/details/8648484 最近需要写一个脚本备份各个服务器上的程序到一个指定服务器上,本来以为查查rsync命令 ...
- linux操作系统-SSH原理介绍与免密运用与远程命令操作
PS:运用好SSH,对管理众多服务器可以带来极大的便利.当我们从一台服务器访问另一台服务器,我们可以输入密码访问,并不影响效率.但是当我们需要访问多台服务器,或者几十上百台的时候就有点麻烦了.或者对几 ...
- linux远程连接telnet命令,Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令...
本节,我们将介绍一些和Linux系统远程登录及通信相关的命令. SSH命令 SSH(Secure Shell即安全的Shell)可以登录和操作远程操作系统,它会建立一个安全的连接,将通信数据进行加密, ...
最新文章
- center os7 安装mysql
- linux python3安装包_Linux下安装python3及相关包
- java对象头_浅谈java对象结构 对象头 Markword
- NOIP模拟赛10 题解
- 愚蠢的领导才会用程序员祭天!!
- Git的基本概念/常用命令及实例
- shell的date命令:使用方法,以及小时、分钟的计算
- 用标准C语言初始化线性表,C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作...
- JS - this,call,apply
- 用unity制作能量护盾(2)
- 《跨越鸿沟》中的提到的五类用户
- 紫外分光光度法测量蛋白质的含量
- 个性推荐①——系统总结个性化推荐系统
- 计算机在线作业office,全国计算机一级office题库与答案
- 蒙德里安的梦想 状态压缩DP (1)
- 理财入门:思维转变和资产理解以及财务自由说明。
- 离散数学学习笔记-2-群 子群
- 程序无法正常启动0xc0000142解决方法
- 和风天气API 版本6和版本7
- 【实践与问题解决29】苹果系统如何做脚本控制手机自动手势