脚本自动化:登录、输入密码、运行命令、在本地保存输出?

脚本自动化:登录、输入密码、运行命令、在本地保存输出?

我一直有一个疑问,Perl 或 Bash 脚本是否可以做到以下几点:

  • 登录另一台机器
  • 输入密码
  • 运行一些命令
  • 将输出保存在本地文件中

我该怎么做?

谢谢这个出色的网站!

答案1

这是可能的,但正确的工具是预计. 大多数脚本语言也有类似 expect 的库可用。

答案2

您的问题带有 perl 标记,因此我假设您正在使用它。

其他假设:

  • 您正在使用 ssh
  • 你使用的是 Linux 类型的系统
  • 如果你使用的是 Windows,请尝试安装 cygwin(对于你正在做的事情来说可能有点过头了)

我会创造ssh 密钥对* 在您的本地和远程机器之间,这使您能够建立一个安全连接,而不必输入密码(对于自动会话非常有用)。链接是谷歌,因为有很多教程,而且它们略有不同,所以你应该找到一个适合你的操作系统版本的教程。

一旦你能做到这一点,你就可以远程执行命令

$local machine> ssh remoteserver.com /file/to/execute.sh

输出将显示在您的本地机器上。然后您可以从 perl 中退出并执行此命令,然后将输出保存到文件中,就像您在本地机器上执行脚本一样。

答案3

下面是一个示例 expect 脚本,它将自动执行你的 ssh(假设)登录源:http://bash.cyberciti.biz/security/expect-ssh-login-script/

#!/usr/bin/expect -f
# Expect script to supply root/admin password for remote ssh server
# and execute command.
# This script needs three argument to(s) connect to remote server:
# password = Password of remote UNIX server, for root user.
# ipaddr = IP Addreess of remote UNIX server, no hostname
# scriptname = Path to remote script which will execute on remote server
# For example:
#  ./sshlogin.exp password 192.168.1.11 who
# ------------------------------------------------------------------------
# Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# ----------------------------------------------------------------------
# set Variables
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]
set scriptname [lrange $argv 2 2]
set arg1 [lrange $argv 3 3]
set timeout -1
# now connect to remote UNIX box (ipaddr) with given script to execute
spawn ssh root@$ipaddr $scriptname $arg1
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof

答案4

我尝试用 expect 来实现这个功能,但是没有用:它最后关闭了连接。

我们可以通过 ssh 运行一个脚本来登录远程机器,运行一个命令,然后不断开连接

因此,在一台机器上通过 ssh 连接,cd 到某某目录,然后运行一个命令,并保持登录状态。

-乔纳森

相关内容