用于自动SSH登录的Shell脚本

时间:2018-10-07 15:05:38

标签: linux bash

我已经创建了一个用于登录服务器的Shell脚本:

#!/bin/sh

echo "Please hostname ..."
while :
do
  read INPUT_STRING
  case $INPUT_STRING in
    host1)
        `bash |sshpass -p 'qwerty123' ssh -o StrictHostKeyChecking=no root@192.168.1.4`
         ;;
    host2)
        `sshpass -p 'qwerty123' ssh -o StrictHostKeyChecking=no root@192.168.1.8`
         ;;
    *)
        echo "Sorry, I don't understand"
        break;
        ;;
  esac
done
echo 
echo "Bye"

但是我无法登录到服务器。我认为问题可能是在访问服务器时更改了脚本上的外壳。 请帮忙。

1 个答案:

答案 0 :(得分:0)

后面的tic导致您的程序失败。去除反引号和打击!你可能会有机会我读过的所有评论都是正确的。您应该考虑使用公钥/私钥对。您可以使用〜/ .ssh / config使登录主机更加容易。

现在尝试使用此代码:

#!/bin/sh

echo "Please hostname ..."
while :
do
  read INPUT_STRING
  case $INPUT_STRING in
    host1)
        sshpass -p 'qwerty123' ssh -o StrictHostKeyChecking=no root@192.168.1.4
         ;;
    host2)
        sshpass -p 'qwerty123' ssh -o StrictHostKeyChecking=no root@192.168.1.8
         ;;
    *)
        echo "Sorry, I don't understand"
        break;
        ;;
  esac
done
echo 
echo "Bye"

这是一个可以做相同事情的班轮:

select INPUT_STRING in host1 host2; do ssh $INPUT_STRING; done

但是,您需要创建一个〜/ .ssh / config文件,以便将host1和host2映射到IP地址:

Host host1
  HostName 192.168.1.4
  User root
  StrictHostKeyChecking no

Host host2
  HostName 192.168.1.8
  User root
  StrictHostKeyChecking no

此外,要避免使用sshpass,可以使用ssh-keygen和ssh-copy-id之类的命令。关于ssh-keygen和ssh-copy-id的文章很多,所以我在这里不再赘述(关键字应该足以使您走得更远)。