我有Linux远程计算机,它在登录尝试时运行脚本,它将运行脚本,并且需要用户输入。
主要目的是在登录该用户时远程测试登录用户,密码和自动脚本响应。
远程计算机内的信息:
$ cat /etc/passwd
remoteuser表:dontCare项:dontCare项:dontCare项:dontCare项:/usr/bin/somescript.sh
当用户登录remoteuser时,somescript.sh将运行。
要求用户输入的脚本内容
$ read -p '>' tmp
而且我不想对该剧本进行任何更改。
登录示例
login: remoteuser
Password: remoteuserpassword
Quit Configuration (q, quit)
我可以使用ssh命令发送用户输入吗? 目前我的方法是使用paramiko ssh,
使用exec_command 连接connection = paramiko.SSHClient()
但仍然无法以正确的顺序发送输入或未能传递给该脚本。
$ echo q
致paramiko exec connection.exec_command('echo q')
我没有使用root登录来测试这个远程用户,因为它没有要求输入密码。
echo q | su - remoteuser
答案 0 :(得分:0)
我是否可以使用ssh命令发送用户输入?
不,除非您更改脚本。 SSH将您的脚本作为用户shell处理(除非您在sshd_config
中也有其他配置),这意味着它使用以下参数运行它,如果您提供一些:
/usr/bin/somescript.sh -c "command"
这与使用/usr/bin/bash -c "commnad"
在用户shell中运行任何其他任意命令的方式相同。在你的情况下,它看起来像
/usr/bin/somescript.sh -c "echo q"
但很可能忽略了脚本的参数。你的脚本在标准输入上等待命令,我相信你也可以在Paramiko中提供输入。
答案 1 :(得分:0)
我最后使用fabric。
from fabric.tasks import execute
from fabric.api import run, settings, env
def remoteuser_login(self):
env.user = 'remoteuser'
env.password = 'remotepassword'
with settings(prompts={'>': 'q\n'}):
run('exit')
并执行
execute(remoteuser_login, host='ipaddress')