mac下使用sshpass实现ssh记住密码

由于有一些场景不能使用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

可以看到,相比第一种方法,这种模式要简单很多。

更简单的使用方法,应该是只需要输入sshphost,就可以完成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与密码数据,格式为"hostpassword"。

例如

10.101.81.238 123456

除了可以动态指定host以外,还可以实现用户名、端口的自定义,暂时没有需求,就这样吧。^_^

相关推荐