用于登录主机的PuTTY脚本

rap*_*yen 10 scripting command-line putty

我正在使用PuTTY远程登录我学校的主持人.登录后,我们需要执行以下步骤:

  1. 输入用户名
  2. 输入密码
  3. 命令"添加oracle"
  4. 命令"sqlplus"
  5. 输入用户名
  6. 输入密码

我将在本学期的课程中大量登录这个主机,我希望创建一个可以消除上述步骤冗余的脚本.忽略在脚本中使用我的密码的明显安全疏忽,我将如何实现这一目标?我没有编写脚本的经验,因此非常感谢您的反馈.谢谢!

编辑:我玩了Putty的命令行选项,我能够绕过1-2步骤:

putty -load "host" -l username -pw password
Run Code Online (Sandbox Code Playgroud)

我还创建了一个看起来像这样的shell文件:

#!/bin/bash

add oracle10g
sqlplus username password
Run Code Online (Sandbox Code Playgroud)

当我尝试使用-m选项将此选项添加到命令行时,它看起来像PuTTY登录到主机,然后立即退出.有没有办法在运行shell文件后保持会话打开,或者我错误地使用-m选项?以下是我一直关注的PuTTY指南的链接:http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter3.html.

这是我尝试从命令行运行的总命令:

putty -load "host" -l username -pw password -m c:\test.sh
Run Code Online (Sandbox Code Playgroud)

rap*_*yen 8

在朋友的帮助下想出来了.该-m腻子选项将结束它执行shell文件后立即您的会话.我所做的是我putty.bat在我的Windows机器上创建了一个使用这些内容调用的批处理脚本:

@echo off
putty -load "host" -l username -pw password
Run Code Online (Sandbox Code Playgroud)

这会将我远程登录到Linux主机.在主机端,我创建了一个sql使用以下内容调用的shell文件:

#!/bin/tcsh

add oracle10g
sqlplus username password
Run Code Online (Sandbox Code Playgroud)

使用了我的主机的Linux版本tcsh.其他Linux版本可能会使用bash,所以只需用bash替换tcsh就可以了.

总而言之,现在可以通过两个简单的步骤自动执行这些步骤:

  1. 双击putty.bat.这将打开PuTTY并将我登录到主机.
  2. 运行命令tcsh sql.这会将oracle工具添加到我的主机,并将我登录到sql数据库.


arp*_*arp 6

我不确定为什么之前的答案没有提示原始海报设置了一个shell配置文件(bashrc,.tcshrc等),每次他们在服务器端登录时都会自动执行命令.

让我到这个页面寻求帮助的任务有点不同 - 我想要为执行不同启动命令的同一主机提供多个PuTTY快捷方式.

我想出了两个解决方案,两个都有效:

(背景)我有一个包含各种PuTTY快捷方式的文件夹,每个快捷方式在快捷方式选项卡中都有"target"属性,如下所示:

"C:\Program Files (x86)\PuTTY\putty.exe" -load host01
Run Code Online (Sandbox Code Playgroud)

每个加载对应于我保存的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"
Run Code Online (Sandbox Code Playgroud)

正在执行的文件看起来像

echo "Hello, World!"
echo ""
export PUTTYVAR=PROXY
/usr/local/bin/bash
Run Code Online (Sandbox Code Playgroud)

(不需要分号)

这会运行脚本命令(在我的情况下只是在终端上打印"Hello,world")并设置我的远程会话可以与之交互的变量.

调试注意事项:当您运行PuTTY时,它会加载-m脚本,如果您编辑脚本则需要重新启动PuTTY而不是仅重新启动会话.

(解决方案2) 这种方法感觉更清晰,因为大脑是在远程Unix端而不是本地Windows端:

从Putty主会话(不是现有会话的"编辑设置")加载已保存的配置,并在SSH选项卡中将远程命令设置为:

export PUTTYVAR=GREEN; bash -l
Run Code Online (Sandbox Code Playgroud)

然后,在我的.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
Run Code Online (Sandbox Code Playgroud)

(解决方案3,未经验证)

还应该可以让bash跳过我的.bashrc并执行一个不同的启动脚本,将它放在PuTTY SSH命令字段中:

bash --rcfile .bashrc_variant -l 
Run Code Online (Sandbox Code Playgroud)