我一直有一个疑问,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 到某某目录,然后运行一个命令,并保持登录状态。
-乔纳森