我想使用 shh 登录远程服务器后运行命令

我想使用 shh 登录远程服务器后运行命令
#! /bin/bash
read -p 'Username: ' user
read -p 'IP: ' ip

ssh "$user"@"$ip"

osascript -e ' tell app "System Events" to display "Hello world"'

此文件将自动运行,因此我不需要运行一个又一个命令

它没有运行最后一个命令,我不知道为什么

这是 Mac 上的终端

答案1

我不知道 ssh 究竟是如何运作的,但您的脚本是这样编写的:它会等到 ssh 命令最终终止。然后它会继续并运行您的最后一行 (osascript...)。为了避免等待 ssh 返回,请&在 ssh 行末尾写入 a。它将让解释器继续在并行线程中执行下一个命令。

答案2

你最后的命令,

osascript -e ' tell app "System Events" to display "Hello world"'

仅当您退出远程 ssh 终端时才会执行。这样您就无法实现您想要做的事情。

希望有期望脚本。您可以使用以下脚本,

#!/bin/sh
expect <<'END'
set timeout 10
set login "your_username" 
set addr "remote_ip"
set pw "your_password"             # skip this line if you have password less login
spawn ssh $login@$addr
expect "$login@$addr's password:"  # skip this line if you have password less login
send -- "$pw\r"                    # skip this line if you have password less login
expect "~"                         # use your prompt here, I have ~, replace ~ with your prompt
send -- "ls\r"                     # replace ls with your command
expect "~"
send -- "exit\r"
expect eof
END

如何使用 Expect 执行 sudo 命令并在 bash 脚本中发送命令?

相关内容