我已经创建了一个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"
但是我不能登录服务器。我认为问题可能是在访问服务器时更改脚本上的shell。请帮帮忙。
发布于 2018-10-08 01:22:34
背部抽筋导致您的程序失败。去掉反引号和bash |,你就有机会了。不过,我读到的所有评论都是正确的。您应该考虑使用公钥/私钥对。您可以使用~/.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"
这里有一个one liner,它几乎做了同样的事情:
select INPUT_STRING in host1 host2; do ssh $INPUT_STRING; done
但是,您需要创建一个~/.ssh/配置文件,以便将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的文章已经很多了,所以我在这里不再赘述(这些关键字应该足以让您深入了解)。
https://stackoverflow.com/questions/52689805
复制相似问题