技术解析

UNIX 菜鸟请教 V 友, linux A 脚本 ssh 另外一台机器执行 A 机器的一个脚本
0
2021-07-01 17:51:16
idczone

最终目的

  • 脚本中获取服务器中一些状态,和开启某些服务
  • 状态生成 log 文件

问题:

  • linux A 脚本无密码 ssh 另外一台机器执行 A 机器的一个脚本
  • 搜过使用 Expect 完成,有 linux 中缺省的工具或者命令吗?

有两个想法

  • 在 Linux A 机器上通过命令的方式执行, log 生成在 Linux A 上,和 Linux B 不相干
  • 在 Linux A 上把文件传到 LinuxB 某一个目录下然后再执行生成 log 文件,再回传回来

还有一点点小疑问

更改完系统语言之后能做到不重启不注销就能显示更改之后的效果吗?

跪谢= =


ansible test -m script -a "test.sh"

在脚本中 echo/print 出来就行了
例子:
> ssh [email&"ping v2ex.com" >> test 2>&1
> cat test
> PING v2ex.com (14.152.44.135) 56(84) bytes of data.
64 bytes from 14.152.44.135: icmp_seq=1 ttl=52 time=21.3 ms
64 bytes from 14.152.44.135: icmp_seq=2 ttl=52 time=21.3 ms
64 bytes from 14.152.44.135: icmp_seq=3 ttl=52 time=21.2 ms
64 bytes from 14.152.44.135: icmp_seq=4 ttl=52 time=21.4 ms
64 bytes from 14.152.44.135: icmp_seq=5 ttl=52 time=21.2 ms
64 bytes from 14.152.44.135: icmp_seq=6 ttl=52 time=27.7 ms
64 bytes from 14.152.44.135: icmp_seq=7 ttl=52 time=20.3 ms
64 bytes from 14.152.44.135: icmp_seq=8 ttl=52 time=20.5 ms
64 bytes from 14.152.44.135: icmp_seq=9 ttl=52 time=20.4 ms
64 bytes from 14.152.44.135: icmp_seq=10 ttl=52 time=20.2 ms
--- v2ex.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9030ms
rtt min/avg/max/mdev = 20.279/21.586/27.712/2.086 ms

想要那种缺省的命令及工具。= =

谢谢,大概知道了。我去试试 0.0

tips
1. 可以用 ssh-copy-id 将本机的公钥拷贝到远程机器的 authorized_keys 文件中,实现无密码登录。可以在部署的时候就把公钥都装好,或用 tcl/expect 先完成公钥拷贝。
2. ssh LinuxB 后面可以直接跟命令,远端的执行的结果就在 A 的标准输出上, ssh 的返回值就是远端的命令返回值。
3. 还可以设置一个 NFS ,在 LinuxB 上 mount 作为 worksace ,执行脚本和 log 都在这个 workspace 中。

还有一点小问题,就是判断被执行端的 linux B 是否已经存在当前 linux A 的公钥?

ssh @ exit && echo "have key" || echo "no key"

linux_A $ ssh [email&'bash -s' < your_local_script_on_A.sh sh-args...

谢谢

谢谢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服