Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Alain1995
V2EX  ›  Linux

UNIX 菜鸟请教 V 友, linux A 脚本 ssh 另外一台机器执行 A 机器的一个脚本

  •  
  •   Alain1995 · Nov 22, 2016 · 3647 views
    This topic created in 3533 days ago, the information mentioned may be changed or developed.

    最终目的

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

    问题:

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

    有两个想法

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

    还有一点点小疑问

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

    跪谢= =

    10 replies    2016-11-22 21:06:59 +08:00
    TheCure
        1
    TheCure  
       Nov 22, 2016
    ansible test -m script -a "test.sh"
    knightdf
        2
    knightdf  
       Nov 22, 2016
    在脚本中 echo/print 出来就行了
    例子:
    > ssh [email protected] "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
    Alain1995
        3
    Alain1995  
    OP
       Nov 22, 2016
    @callofmx 想要那种缺省的命令及工具。= =
    Alain1995
        4
    Alain1995  
    OP
       Nov 22, 2016
    @knightdf 谢谢,大概知道了。我去试试 0.0
    ceyes
        5
    ceyes  
       Nov 22, 2016   ❤️ 1
    tips
    1. 可以用 ssh-copy-id 将本机的公钥拷贝到远程机器的 authorized_keys 文件中,实现无密码登录。可以在部署的时候就把公钥都装好,或用 tcl/expect 先完成公钥拷贝。
    2. ssh LinuxB 后面可以直接跟命令,远端的执行的结果就在 A 的标准输出上, ssh 的返回值就是远端的命令返回值。
    3. 还可以设置一个 NFS ,在 LinuxB 上 mount 作为 worksace ,执行脚本和 log 都在这个 workspace 中。
    Alain1995
        6
    Alain1995  
    OP
       Nov 22, 2016
    @ceyes 还有一点小问题,就是判断被执行端的 linux B 是否已经存在当前 linux A 的公钥?
    ceyes
        7
    ceyes  
       Nov 22, 2016
    @Alain1995 ssh <user>@<IP_of_LinuxB> exit && echo "have key" || echo "no key"
    gihnius
        8
    gihnius  
       Nov 22, 2016
    linux_A $ ssh you@linux_B 'bash -s' < your_local_script_on_A.sh sh-args...
    Alain1995
        9
    Alain1995  
    OP
       Nov 22, 2016
    @ceyes 谢谢
    Alain1995
        10
    Alain1995  
    OP
       Nov 22, 2016
    @gihnius 谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 09:10 · PVG 17:10 · LAX 02:10 · JFK 05:10
    ♥ Do have faith in what you're doing.