#!/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
这是可能的,但正确的工具是expect。大多数脚本语言也有类似期望的库。
你的问题是用 perl 标记的,所以我假设你正在使用它。
其他假设:
我将在您的本地和远程机器之间创建ssh 密钥对*,这使您能够建立一个安全连接而无需输入密码(对自动会话非常有帮助)。链接是谷歌的,因为教程太多了,而且略有不同,所以你应该找到一个适合你的操作系统版本的教程。
一旦你能够做到这一点,你就可以远程执行命令
输出将显示在您的本地计算机上。然后,您可以从 perl 中退出并执行此命令,然后将输出保存到文件中,就像您在本地计算机上执行脚本一样。
这是一个示例期望脚本,它将自动化您的 ssh(假设)登录源:http ://bash.cyberciti.biz/security/expect-ssh-login-script/
我用expect尝试了这个,但是没有用:它最后关闭了连接。
我们可以通过 ssh 运行一个脚本,该脚本将登录到远程机器,运行命令,而不是断开连接吗?
所以在一台机器上ssh,cd到某某目录,然后运行一个命令,并保持登录状态。
-乔纳森