本文介绍如何在命令行中带着密码登陆ssh,基于ubuntu 16.04 64bit系统。
本文内容适应于各种 CI 系统。
简化记录
1 | sudo apt install sshpass |
使用sshpass
安装:
1 | sudo apt install sshpass |
使用格式:
1 | sshpass -p <密码> ssh <用户名>@<IP或域名> -o StrictHostKeyChecking=no [在远程服务器执行的命令] |
<>
为必填项,[]
为可选项。-o StrictHostKeyChecking=no
表示不检查key,因为首次登陆时,会出现:
1 | The authenticity of host 'XXX (120.XX.237.XX)' can't be established. |
此时,必须手动输入yes或no才能输入密码。
使用示例:
1 | sshpass -p 123456 ssh latelee@192.168.28.131 -o StrictHostKeyChecking=no "echo hello > /tmp/foo" |
注:使用复杂的密码(有特殊符号)测试时,发现-p
后的密码需要使用双引号即-p "1234"
。
密码使用环境变量保存,不在命令中出现:
1 | export SSHPASS="123456" # 设置环境变量,SSHPASS为sshpass固定的变量 |
如果执行的命令出错,会有相应的提示(命令找不到,或命令使用非法)。如下:
1 | sshpass -p 123456 ssh latelee@192.168.28.131 -o StrictHostKeyChecking=no "echo111 hello > /tmp/foo" |
即主机上有错误命令的提示,
在命令最后添加 >/dev/null 2>&1
,将错误信息重定向到/dev/null中。则在主机不会显示。
1 | sshpass -p 123456 ssh latelee@192.168.28.131 -o StrictHostKeyChecking=no "echo111 hello > /tmp/foo >/dev/null 2>&1" |
注:命令执行出错会返回错误码,使用echo $?
可查看。
如果已用 ssh 登录过系统,则不需要再带 -o StrictHostKeyChecking=no
选项。
如果已保存了密钥,可不需要带-p <密码>
。
在 sshpass 中执行的命令可带环境变量,但该环境变量只有保存到运行 sshpass 命令所在的主机中才生效。
下载:https://pkgs.org/download/sshpass
编译安装:
1 | git clone git://github.com/kevinburke/sshpass.git |