交互式 ssh 会话从 bash 命令开始
Interactive ssh session started from bash command
我正在尝试启动从 bash 命令创建的交互式 ssh 会话(如下所示)。
如果我不添加 'ttt',我只会收到 'non interactive' 会话消息并且 ssh 会话关闭。
添加 'ttt' 标志后,会话保持打开状态,但我无法输入命令或与远程会话交互。
这是我要执行的命令的简化版本
echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt" [=11=]' {}
不确定是否应该添加额外的标志或执行此操作的替代方法。
xargs
(因此 bash
,因此 ssh
)的输入来自管道,而不是您的终端。根据更大的上下文,这些选项之一应该可以让 ssh
从终端读取:
首先将主机列表捕获到一个数组,然后使用 for
循环而不是 xargs
。像这样:
readarray -t hostarray < <(echo "username@host")
for host in "${hostarray[@]}"; do
ssh "$host"
done
将-o
选项添加到xargs
,告诉它从/dev/tty(即终端)重定向命令的标准输入。
通过不同的文件描述符重定向 xargs
命令周围的常规标准输入,例如#3(注意:我还没有测试过):
{ echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt "[=11=]" <&3' {}; } 3<&0
顺便说一句,除了 ssh
没有得到它应该得到的输入(即从终端)的问题之外,您还可能会遇到它窃取用于其他用途的输入的问题,例如您希望 xargs
阅读的主机列表。参见 BashFAQ #89: I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!
我正在尝试启动从 bash 命令创建的交互式 ssh 会话(如下所示)。
如果我不添加 'ttt',我只会收到 'non interactive' 会话消息并且 ssh 会话关闭。
添加 'ttt' 标志后,会话保持打开状态,但我无法输入命令或与远程会话交互。
这是我要执行的命令的简化版本
echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt" [=11=]' {}
不确定是否应该添加额外的标志或执行此操作的替代方法。
xargs
(因此 bash
,因此 ssh
)的输入来自管道,而不是您的终端。根据更大的上下文,这些选项之一应该可以让 ssh
从终端读取:
首先将主机列表捕获到一个数组,然后使用
for
循环而不是xargs
。像这样:readarray -t hostarray < <(echo "username@host") for host in "${hostarray[@]}"; do ssh "$host" done
将
-o
选项添加到xargs
,告诉它从/dev/tty(即终端)重定向命令的标准输入。通过不同的文件描述符重定向
xargs
命令周围的常规标准输入,例如#3(注意:我还没有测试过):{ echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt "[=11=]" <&3' {}; } 3<&0
顺便说一句,除了 ssh
没有得到它应该得到的输入(即从终端)的问题之外,您还可能会遇到它窃取用于其他用途的输入的问题,例如您希望 xargs
阅读的主机列表。参见 BashFAQ #89: I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!