使用ssh execute command

时间:2017-04-11 02:55:58

标签: linux bash shell ssh paramiko

我有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

2 个答案:

答案 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')