向远程机器发送打印字符串命令

osx*_*ser 5 linux remote-desktop ssh bash command-line

我想向远程计算机中运行的所有打开的终端进程打印一些字符串。目前我正在使用 ssh 连接远程计算机,然后将我的字符串回显到wall命令中:

local> ssh me@1.2.3.4
(prompt to provide credentials)
remote> echo "123" | wall 
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在一个命令中完成所有操作,无需用户交互即可运行?

mas*_*ice 10

您将需要设置基于 SSH 密钥的身份验证,以便不需要输入密码。

  1. 在客户端计算机上,运行以下命令将当前用户的公钥复制到服务器的authorized_hosts文件中:

    ssh-copy-id me@1.2.3.4
    <enter password>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保您现在不需要输入密码:

    ssh me@1.2.3.4 true
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后只需将命令附加到 SSH 命令,如下所示:

    ssh me@1.2.3.4 'echo asdf | wall'
    
    Run Code Online (Sandbox Code Playgroud)

您可能需要-tt在 SSH 中使用该标志,以确保在 TTY 中运行该命令。

请注意单引号',它们确保管道|不会被本地 shell 解析。

  • 作为单引号管道方法的替代方案,_如果_您可以使用无密码登录,则可以使用“echo asdf |”之类的方法来代替。ssh me@192.0.2.1 wall`。不同之处在于,在这种形式中,“echo”在本地系统上运行。这两种方式在大多数情况下都有效,但在本地运行生成消息的命令可能会在某些情况下实现更好的错误处理。 (9认同)