我在使用以下命令行执行 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”
另外两个链接提供了一些见解。
如何选择在 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