在linux中经常要用ssh登陆,感觉很麻烦。我已经为这件事件折腾过好几次啦。这次准备总结一下
1、使用ssh公钥免密登陆
命令使用:
ssh-keygen -t rsa #不管中途遇到啥提示,直接回车
cd ~/.ssh
cp id_rsa.pub authorized_keys
scp authorized_keys username@host:~/.ssh/
之后再使用ssh username@host 就可以不用输入密码直接登陆服务器啦。
但是有时候,我不怎么想把自己的公钥到处传,虽然它本来就是用来到处传的。那么我要怎么办呢?来看第二种方法吧
2、使用sshpass命令
使用这个命令还需要自己额外安装。不同的系统请自行搜索安装方式吧。
安装好之后,以下命令就可以带上密码的。简单吧!有它就不用到处传公钥了。
这个方式惟一的缺点就是无处不在的墙,有时候安装得真的慢。
sshpass -p password ssh username@host
找到自己的文档,来安装sshpass居然遇到了问题,把安装方式也加到这里了。
mac安装sshpass:
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
安装完之后,发现自己还是没法按上面的命令正常使用sshpass,简直了。
一运行就提示:sshpass: Failed to run command: No such file or directory
按以下方式运行就可以了:
sshpass -p password ssh user@host
3、mac上的expect
这个方式仅做记录,因为它不但装的东西多,还要写脚本。简直麻烦。
有兴趣的小伙伴自己看这个博客吧。
注意:expect脚本不能使用sh xx.sh来进行运行,因为它使用的是expect, 不是shell。
运行方式如下:./aa.sh ip 或者使用expect aa.sh ip
#!/usr/bin/expect
set IP [lindex $argv 0]
set PASSWD "pFZcCeGq3phl"
spawn ssh -tt root@$IP
expect {
"(yes/no)?" {
send "yes\r"
expect "password:"
send "$PASSWD\r"
}
"password:" {send "$PASSWD\r"}
}
interact
expect eof