编写登录和退出ssh服务器的脚本

编写登录和退出ssh服务器的脚本

为了这个解释,机器是我的笔记本电脑,我用它连接到远程服务器 - 我将其称为服务器名称

该过程可以描述如下:

  1. 我连接到服务器服务器名称ssh来自机器
  2. 然后我插入密码服务器名称
  3. 我编译了一些东西服务器名称
  4. 我退出服务器名称(使用exit
  5. 然后我重新启动服务器名称机器
  6. ping 服务器名称然后我等到收到它的响应(ping的输出显示在控制台上)
  7. ssh进入服务器名称再次
  8. 我进行了一些检查
  9. 最后,我exit服务器名称为了回到机器

为了完成上面的食谱,我手动运行以下命令机器:

<machine>$ ssh server_name
insert password for server_name:
<server_name>$ cd /some/path/
<server_name>$ make clean > /dev/null
<server_name>$ make > /dev/null
<server_name>$ exit
<machine>$ ./my_reboot_script server_name
<machine>$ ping server_name
PING 10.23.22.7 with 56(84) bytes of data.
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
^C
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ ./run_some_checks
<server_name>$ exit
<machine>$ echo "Done!"

上面的几个注释按顺序排列:
-my_reboot_script只是一个允许我冷重启的程序服务器名称从我自己的座位上来看。
- 冷重启后服务器名称,我需要等待它恢复,以便我可以使用 重新连接到它ssh。为此,我使用ping;它仅用作何时的指示服务器名称准备好再次接受连接;只有当我看到ping输出最终在控制台上生成时,我才会使用 Ctrl+C 中断它,然后ssh进入服务器名称

手动执行上述操作既乏味又耗时。所以我想把上面的过程自动化,但是有三个难点:

  1. 连接到时服务器名称exit,从 shell发出命令会优雅地将我注销并返回到机器。但是,exit从脚本.sh文件内发出将终止脚本...
  2. 我怎样才能自动输入密码服务器名称阶段?我不想手动输入密码,而是让脚本来完成;换句话说 - 我想以某种方式将密码硬编码到脚本中,这样它就不会打扰我。
  3. “等待服务器准备好 ssh 连接”阶段:如何自动化此操作?意思是,ping我希望脚本ping识别出有来自服务器名称,然后连接ssh。虽然,ping在这里使用可能不是一个好主意,因为响应并ping不能保证服务器名称已准备好监听连接(根据我对上述过程的经验,从获得ssh第一个响应起,还需要几秒钟的时间)。ping因此,更好的方法可能是让脚本继续尝试ssh循环,直到授予访问权限(某种繁忙的等待机制,甚至是每隔几秒睡眠和唤醒以尝试连接的循环)。

答案1

如果您可以将公钥数据从您的计算机获取到服务器的.ssh/authorized_key文件,则可以通过每个服务器的一次调用来运行编译ssh,而无需输入密码:

ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'

SERVER您可以将其放入 shell 脚本的循环中,每次都更改 shell 变量的值。如果您不介意每次ssh调用时输入密码,您甚至不需要服务器上的公钥数据。

相关内容