由于有一些场景不能使用ssh私钥来实现免登,因此需要想其它办法解决一下这个问题。
安装sshpass
试图使用homebrew安装
$ brew install sshpass
Error: No available formula for sshpass
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.
这个萌卖的好。。。。
使用homebrew强制安装
brew install https://raw.github.com/eugeneoden/homebrew/eca9de1/Library/Formula/sshpass.rb
成功了。。。
编译安装
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz
tar xvzf sshpass-1.05.tar.gz
./configure --prefix=/usr/local/Cellar/sshpass/1.05
make
sudo make install
编译安装的步骤是从brew的步骤中copy出来的,绝对可行。其中./configure 后面的prefix路径可以去掉,这样就会安装到默认目录中。
使用方式
sshpass -p 'ssh_password' ssh xxx.xxx.xxx.xxx
可以看到这种方式其实还是要在命令里指定host+密码登录,还是不够方便。期待的方式是只需要指定host即可,密码神马的,能自己处理。
简单的使用方式
写一个脚本,记录一些常用的用户名与密码,通过简单的选择即可完成ssh登录。
创建一个文件sshp。
#!/bin/bash
cat <<MENU
a => 10.101.81.238
10.101.81.238 => 10.101.81.238
b => 192.168.4.151
192.168.4.151 => 192.168.4.151
c => 192.168.4.2
192.168.4.2 => 192.168.4.2
>>> 请输入ip或序号 <<<
MENU
echo -n "Your choose:"
read host
case "$host" in
a|10.101.81.238)
exec /usr/local/bin/sshpass -p 123456 ssh [email protected] -p22
;;
b|192.168.4.151)
exec /usr/local/bin/sshpass -p 'sdfsdf' ssh [email protected] -p22
;;
c|192.168.4.2)
exec /usr/local/bin/sshpass -p 'wfssfs' ssh [email protected] -p22
;;
*)
echo "Error, No host"
;;
esac
使用方法
$ sshp
a => 10.101.81.238
10.101.81.238 => 10.101.81.238
b => 192.168.4.151
192.168.4.151 => 192.168.4.151
c => 192.168.4.2
192.168.4.2 => 192.168.4.2
>>> 请输入ip或序号 <<<
Your choose:a
# ssh login success
可以看到,相比第一种方法,这种模式要简单很多。
更简单的使用方法,应该是只需要输入 sshp host,就可以完成ssh登录。
更简单的使用方式
使用一个文件存储host、password对,自行根据host匹配密码,并登录。
创建一个脚本,名为sshp,内容如下。
#!/bin/bash
RC_ERR_NO_HOST=11
RC_ERR_NO_PASSWORD=21
RC_SUCCESS=0
pass_path=~/.ssh/sshp_pass
host=$1
# arguments
if [ -z $host ]; then
echo "ERR_NO_HOST, please input host."
exit $RC_ERR_NO_HOST
fi
# read file
pwd=`grep $host\ $pass_path | cut -d' ' -f 2`
if [ -z $pwd ]; then
echo "ERR_NO_PASSWORD, please record password first. file path $pass_path"
exit $RC_ERR_NO_PASSWORD
fi
exec sshpass -p $pwd ssh root@$host -p22
exit $RC_SUCCESS
使用方法
sshp host
创建一个文件 ~/.ssh/sshp_pass,存放 host 与密码数据,格式为"host password"。
例如
10.101.81.238 123456
除了可以动态指定host以外,还可以实现 用户名、端口的自定义,暂时没有需求,就这样吧。^_^