10

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

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

在本学期的课程中,我将经常登录这个主机,我希望创建一个脚本来消除上述步骤的冗余。忽略在脚本中包含密码的明显安全疏忽,我将如何实现这一点?我的脚本编写经验为零,因此非常感谢您的反馈。谢谢!

编辑:我使用了 Putty 的命令行选项,并且能够使用以下方法绕过步骤 1-2:

putty -load "host" -l username -pw password

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

#!/bin/bash

add oracle10g
sqlplus username password

当我尝试使用 -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
4

8 回答 8

8

在朋友的帮助下解决了这个问题。PuTTY 选项将-m在执行 shell 文件后立即结束您的会话。我所做的是putty.bat在我的 Windows 机器上创建了一个用这些内容调用的批处理脚本:

@echo off
putty -load "host" -l username -pw password

这让我远程登录到 Linux 主机。在主机端,我创建了一个sql带有以下内容的 shell 文件:

#!/bin/tcsh

add oracle10g
sqlplus username password

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

总而言之,自动化这些步骤现在只需两个简单的步骤:

  1. 双击putty.bat。这会打开 PuTTY 并将我登录到主机。
  2. 运行命令tcsh sql。这会将 oracle 工具添加到我的主机,并将我登录到 sql 数据库。
于 2013-01-12T04:17:10.267 回答
6

我不确定为什么以前的答案没有建议原始发布者设置一个 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 
于 2014-11-13T02:54:02.000 回答
2

当您使用-m选项 putty 不分配 tty 时,它会运行命令并退出。如果你想运行一个交互式脚本(比如一个 sql 客户端),你需要告诉它分配一个 tty -t,见3.8.3.12 -t and -T: control pseudo-terminal allocation. 您将避免在服务器上保留脚本,以及在连接后必须调用它。

这是我用来从批处理文件连接到 mysql 的内容:

#mysql.bat start putty -t -load "sessionname" -l username -pw password -m c:\mysql.sh

#mysql.sh mysql -h localhost -u username --password="foo" mydb

https://superuser.com/questions/587629/putty-run-a-remote-command-after-login-keep-the-shell-running

于 2014-03-04T15:12:44.103 回答
0

mputty 可以做到这一点,但它似乎并不总是有效。(如果等待时间太慢)

mputty 使用 putty 并且它扩展了 putty。有一个运行脚本的选项。如果它不起作用,请确保键入前的等待时间是一个高值或增加该值。查看腻子会话,然后是会话名称、鼠标右键、属性/脚本页面。

于 2014-03-06T14:13:28.870 回答
0

登录后输入命令可以通过 putty 底部的 SSH 部分完成,您应该有一个选项 Remote command (data to send to server) 用 ; 分隔两个命令

于 2013-06-22T18:33:26.653 回答
0

我想为这些要求提出一个通用的解决方案,也许它对你有用:AutoIt。使用该程序,您可以在像 Putty 这样的任何窗口顶部编写脚本并执行您想要执行的所有命令(例如在文本框或按钮中按下按钮或鼠标单击)。

通过这种方式,您可以模拟您一直使用 Putty 执行的所有步骤。

于 2013-01-11T01:00:29.390 回答
0

对我来说,它是这样工作的:

putty -ssh root@1.1.1.1 22 -pw password

putty,协议,用户名@ip地址端口和密码。在不到一秒钟的时间内连接。

于 2020-04-27T06:05:34.280 回答
-1

如果您-i privatekeyfilelocation使用的是私钥而不是基于密码,则可以使用 。

于 2014-02-11T14:28:03.493 回答