我不确定为什么以前的答案没有建议原始发布者设置一个 shell 配置文件(bashrc、.tcshrc 等),每次他们在服务器端登录时都会自动执行他们的命令。
将我带到此页面寻求帮助的任务有点不同——我想要同一主机的多个 PuTTY 快捷方式来执行不同的启动命令。
我想出了两个解决方案,它们都有效:
(背景)我有一个包含各种 PuTTY 快捷方式的文件夹,每个快捷方式选项卡中的“目标”属性看起来像:
"C:\Program Files (x86)\PuTTY\putty.exe" -load host01
每个负载对应于我保存的 PuTTY 配置文件(在“会话”选项卡中使用不同的主机)。(大多数情况下,它们只在配色方案上有所不同——我喜欢让每组相关任务在终端窗口中共享一个配色方案,而关键任务,比如在生产系统上以 root 身份登录,只在颜色明显的窗口中执行。)
该文件夹的 Windows 属性设置为非常干净和精简——它用作一个小控制台,为我经常使用的每个远程 PuTTY 和 RDP 连接提供快捷图标。
(解决方案1)
正如其他答案中提到的 -m 开关用于在 Windows 端配置脚本以运行, -t 开关用于保持连接,但我发现如果我想获得它是顺序敏感的它在不退出的情况下运行
经过大量试验和错误后,我终于开始工作的是:
(快捷方式目标字段):
"C:\Program Files (x86)\PuTTY\putty.exe" -t -load "SSH Proxy" -m "C:\Users\[me]\Documents\hello-world-bash.txt"
正在执行的文件看起来像
echo "Hello, World!"
echo ""
export PUTTYVAR=PROXY
/usr/local/bin/bash
(不需要分号)
这会运行脚本命令(在我的例子中,只是在终端上打印“Hello, world”)并设置一个我的远程会话可以与之交互的变量。
调试注意事项:当您运行 PuTTY 时,它会加载 -m 脚本,如果您编辑脚本,则需要重新启动 PuTTY 而不是重新启动会话。
(解决方案2)
这种方法感觉更干净,因为大脑在远程Unix端而不是本地Windows端:
从 Putty 主会话(不是现有会话中的“编辑设置”)加载保存的配置并在 SSH 选项卡中将远程命令设置为:
export PUTTYVAR=GREEN; bash -l
然后,在我的 .bashrc 中,我有一个部分根据该变量执行不同的操作:
case ${PUTTYVAR} in
"")
echo ""
;;
"PROXY")
# this is the session config with all the SSH tunnels defined in it
echo "";
echo "Special window just for holding tunnels open." ;
echo "";
PROMPT_COMMAND='echo -ne "\033]0;Proxy Session @master01\$\007"'
alias temppass="ssh keyholder.example.com makeonetimepassword"
alias | grep temppass
;;
"GREEN")
echo "";
echo "It's not easy being green"
;;
"GRAY")
echo ""
echo "The gray ghost"
;;
*)
echo "";
echo "Unknown PUTTYVAR setting ${PUTTYVAR}"
;;
esac
(解决方案3,未尝试)
也应该可以让 bash 跳过我的 .bashrc 并执行不同的启动脚本,方法是将其放在 PuTTY SSH 命令字段中:
bash --rcfile .bashrc_variant -l