linux ssh sshpass - ssh无交互密码

【基本介绍】
ssh远程连接到服务器认证密码的时候分为交互模式和非交互模式。交互模式就是我们登入要手动输入密码,非交互模式就是不需要人工输入密码。
这里我们介绍非交互模式

【非交互模式】
1.公钥和私钥的方式
Master作为客户端,要实现无密码公钥认证,连接到服务器Salve上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Salve上。当Master通过SSH链接到Salve上时,Salve会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Salve,Salve确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Salve上。

1.1 ssh-keygen -t rsa 生成密钥文件
1.2 将id_rsa.pub加到授权的authorized_keys里面去
1.3 拷贝id_rsa.pub密匙文件到目的服务器(ssh-copy-id)
1.4 注意文件的权限问题

2.sshpass
sshpass is a utility designed for running ssh using the mode referred to as "keyboard-interactive" password authentication, but in non-interactive mode.

[code="linux"]
# sshpass --help
sshpass: invalid option -- '-'
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin

-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
[/code]
[code="linux"]
# sshpass root ssh -l root ipaddress "cat /etc/issue"
[/code]

3.expect交互
[code="linux"]
# cat expect.exp
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]
set password [lindex $argv 1 ]
set timeout 5
spawn ssh root@$ip
expect {
"*yes/no" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
interact
# ./expect.exp ipaddress root
spawn ssh root@192.168.197.129
[/code]


【参考】
[url]http://www.2cto.com/os/201301/186673.html[/url]
[url]https://linuxtoy.org/archives/sshpass.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值