从命令行打开具有定义标题的 ssh 会话

从命令行打开具有定义标题的 ssh 会话

我在使用以下命令行执行 putty 时遇到了一些问题-m论点。请帮我解决这个问题,或者如果你知道更好的方法,请提出建议 :)

命令(来自“运行”):

putty -ssh user@machine -pw password -m C:\test.txt

“test.txt”命令:

PROMPT_COMMAND='echo -ne "\033]0;'$( ifconfig | head -2 | tail -1 | awk '{print $2}')'\007"'

问题:
它打开会话然后立即关闭

它应该做什么:从命令行打开具有定义标题的 ssh 会话

谢谢。

答案1

我相信你尝试过做类似的事情这个答案。但问题是,那里提供的示例命令要从服务器上的文件中执行。

它们不能作为命令传递,使用 -m 开关执行。PuTTY 的这个开关就是模仿Linux 命令行 SSH 客户端的行为:

ssh user@foo command

这样 ssh 就会在服务器user上记录一个foo,在那里运行command,然后退出。看起来使用 -m PuTTY 正在做同样的事情。

我的建议

是在远程服务器上准备一个脚本并以不同的方式配置 PuTTY。首先,您需要创建一个文件,其中包含登录后要运行的命令,我们将其命名为.title

cat > ~/.title

然后只需键入或复制并粘贴您需要的任何内容,然后按 Ctrl+D。现在让我们测试设置标题:

echo -ne "\033]0;PuTTY\007"

您甚至可以直接在终端中尝试上述操作。如果 PuTTY 的窗口标题没有改变,则您的发行版很可能已经设置默认 PROMPT_COMMAND 变量。您可以通过在终端中执行以下命令来确认

echo $PROMPT_COMMAND
unset PROMPT_COMMAND
echo -ne "\033]0;PuTTY test\007"

关键是取消设置PROMPT_COMMAND变量的当前值。然后最后一个命令应该将窗口标题设置为PuTTY test

我的解决方案

对我来说,有用的是在 PuTTY 中准备一个会话,GUI 中的“远程命令”框设置:

/bin/bash --rcfile ~/.title

只需记住提供此会话的名称(例如:SessionName)并按下 PuTTY 设置第一页上“已保存的会话”列表附近的“保存”按钮:)

然后你可以启动PuTTY并告诉它加载此会话

putty -load SessionName -l user -pw password

是的,这很遗憾,但是对于已保存的会话,没有与“远程命令”框等效的命令行。这就是为什么必须克服所有这些障碍的原因 :(

TL;DR 版本

假设你正确地执行了所有这些步骤,那么一切都会正常工作:

  • ~/.title在远程机器上创建脚本
  • 准备一个使用远程命令的会话,该会话运行 Bash,并将执行~/.title
  • 告诉 PuTTY 在启动时加载准备好的会话,指定用户和密码

专家提示

您不应该在命令行(可能在脚本中)以明文形式指定密码,而应该学习使用 SSH 密钥并在 Windows 托盘中运行“Pageant”(PuTTY 身份验证代理)。

答案2

我现在没有 ssh 来测试,但是http://www.derkeiler.com/Newsgroups/comp.security.ssh/2012-04/msg00005.html “如果您只是希望窗口保持打开状态以供您查看,请在脚本末尾放置 sleep 10 以等待 10 秒。如果您想使用 shell,请exec /bin/bash在末尾使用。Shai”

另外两个链接提供了一些见解。

PuTTY:登录后运行远程命令并保持 shell 运行

如何选择在 Linux 中显示在 PuTTY 标题栏中的内容?

由 barlop 添加

以下不是使用 putty,而是使用 cygwin 中的 openssh 该a.a文件可能包含 ls 或用于更改提示符的命令。它是本地的。

$ ssh 127.0.0.1 "cat | bash" < a.a

相关,请参阅我刚刚发布的答案 -https://unix.stackexchange.com/questions/87405/how-can-i-execute-local-script-on-remote-machine-and-include-arguments/208952#208952

相关内容