首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于自动进行SSH登录的Shell脚本

用于自动进行SSH登录的Shell脚本
EN

Stack Overflow用户
提问于 2018-10-07 23:05:38
回答 1查看 72关注 0票数 -3

我已经创建了一个shell脚本来登录我的服务器:

代码语言:javascript
复制
#!/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。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2018-10-08 01:22:34

背部抽筋导致您的程序失败。去掉反引号和bash |,你就有机会了。不过,我读到的所有评论都是正确的。您应该考虑使用公钥/私钥对。您可以使用~/.ssh/config更轻松地登录到主机。

现在试试这段代码:

代码语言:javascript
复制
#!/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,它几乎做了同样的事情:

代码语言:javascript
复制
select INPUT_STRING in host1 host2; do ssh $INPUT_STRING; done

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

代码语言:javascript
复制
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的文章已经很多了,所以我在这里不再赘述(这些关键字应该足以让您深入了解)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52689805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档