我已经创建了一个用于登录服务器的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"
但是我无法登录到服务器。我认为问题可能是在访问服务器时更改了脚本上的外壳。 请帮忙。
答案 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的文章很多,所以我在这里不再赘述(关键字应该足以使您走得更远)。