Linux sshd是否在SSH\u MSG\u CHANNEL\u REQUEST exec之后将数据发送到stdin
我正在编写必须执行远程shell命令的部分软件。此命令等待来自stdin的一些附加信息,以便继续执行 以下是远程程序测试_interactive.sh: 这并不能解决问题,但提供了更多关于sshd行为的信息。我仍然需要能够形成我的信息,为该计划的基础上,我已经到了我,而不仅仅是火和忘记 顺便说一句,添加rfc4254标签会很酷;) ↓ 在老师的帮助下,我找到了答案 是的,sshd在“SSH\u MSG\u CHANNEL\u REQUEST exec”之后将数据发送到stdin。Linux sshd是否在SSH\u MSG\u CHANNEL\u REQUEST exec之后将数据发送到stdin,linux,ssh,stdin,sshd,Linux,Ssh,Stdin,Sshd,我正在编写必须执行远程shell命令的部分软件。此命令等待来自stdin的一些附加信息,以便继续执行 以下是远程程序测试_interactive.sh: 这并不能解决问题,但提供了更多关于sshd行为的信息。我仍然需要能够形成我的信息,为该计划的基础上,我已经到了我,而不仅仅是火和忘记 顺便说一句,添加rfc4254标签会很酷;) ↓ 在老师的帮助下,我找到了答案 是的,sshd在“SSH\u MSG\u CHANNEL\u REQUEST exec”之后将数据发送到stdin。 但是你需要小心
但是你需要小心你发送的内容。在我的例子中,形成响应消息的方法从流中删除了'\n'字符。shell函数读取继续时需要此字符。能否编辑您的问题,以包含部分不工作零件的实际代码?此test_交互式程序是否希望其输入被行终止符终止?您真的发送了一个行终止符作为数据的一部分吗?谢谢您对这个问题的关注。我已更新了我的问题。您是否可以编辑您的问题,使其包含将这些邮件发送到服务器的实际代码以及正在发送的特定字符?1。下面是负责生成ssh消息的文件(方法名为“SendMessage(…)”):2。发送的确切字符串可能是:“Hello”或“Hello\n”-消息的形式不会影响行为。3.最后,一切都归结到.NET Framework中的方法。“确切的字符串…可能是:'Hello'或'Hello\n'-消息的形式不影响行为”test\u交互脚本中的
read
语句读取一行输入,因此它将阻塞,直到看到行终止符或EOF为止。所以是的,信息的形式应该能够影响行为。
#!/bin/sh
echo -n "Please, enter a string: "
read string # <-- Wait here for the input to come...
if [ -z "$string" ] ; then
echo "1. You entered empty string." 1>&2
else
echo "1. Your string: $string"
fi
Send: 'SSH_MSG_CHANNEL_OPEN session'
Receive: 'SSH_MSG_CHANNEL_OPEN_CONFIRMATION 0'
Send: 'SSH_MSG_CHANNEL_REQUEST exec'
Receive: 'SSH_MSG_CHANNEL_WINDOW_ADJUST'
Receive: 'SSH_MSG_CHANNEL_SUCCESS'
Receive: 'SSH_MSG_CHANNEL_DATA Please, enter a string:'
Send: 'SSH_MSG_CHANNEL_DATA hello' <-- communication stops here
Send: 'SSH_MSG_CHANNEL_REQUEST exec'
Send: 'SSH_MSG_CHANNEL_DATA Hello World'
Send: 'SSH_MSG_CHANNEL_EOF'
Receive: 'SSH_MSG_CHANNEL_DATA Please, enter a string:'
Receive: 'SSH_MSG_CHANNEL_REQUEST exit-status'
Receive: 'SSH_MSG_CHANNEL_DATA Please, enter a string: 1. Your string: Hello\n'
Receive: 'SSH_MSG_CHANNEL_EOF'
Receive: 'SSH_MSG_CHANNEL_CLOSE'
Send: 'SSH_MSG_CHANNEL_CLOSE'
Send: 'SSH_MSG_DISCONNECT'