【问题标题】:Paramiko SSH set environment variable using pythonParamiko SSH使用python设置环境变量
【发布时间】:2015-07-03 21:51:09
【问题描述】:

我正在使用 Paramiko 将 ssh 命令发送到远程 Windows 服务器,它可以工作,但是我需要先设置一个环境变量,该变量设置一个密码供主命令使用。 所以在我使用的 Windows Server 命令行上:

$ set ASPERA_SCP_PASS=passwordToUse
$ ascp -d --src-base=//DirectoryToSend //DirectoryToSend username@123.23.34.1:/

这会设置一个环境变量passwordToUse,它会在ascp 命令中使用。 但我无法与 Paramiko 合作。运行以下脚本时,我得到exit status: 0,但该命令不在远程服务器上运行。

import sys
import paramiko

nbytes = 4096
hostname = '10.0.0.1'
port = 22
username = 'remoteUsername' 
password = 'remotePassword'
command1 = 'set ASPERA_SCP_PASS={}'.format('passwordToUse')
command2 = 'ascp -d --src-base=//DirectoryToSend //DirectoryToSend username@123.23.34.1:/'
command3 = command1 + ", " + command2

client = paramiko.Transport((hostname, port))
client.connect(username=username, password=password)

stdout_data = []
stderr_data = []
session = client.open_channel(kind='session')
session.exec_command(command3)
while True:
    if session.recv_ready():
        stdout_data.append(session.recv(nbytes))
    if session.recv_stderr_ready():
        stderr_data.append(session.recv_stderr(nbytes))
    if session.exit_status_ready():
        break

print 'exit status: ', session.recv_exit_status()
print ''.join(stdout_data)
print ''.join(stderr_data)

session.close()
client.close()

【问题讨论】:

  • 听起来你需要在建立连接之前设置本地环境变量。你应该使用os.environ,这是一个反映环境的字典。
  • 好的,请问我该如何实现?
  • os.environ['ASPERA_SCP_PASS'] 返回你上面在 python 中输入的值。
  • 对不起,我不明白如何在我的代码中使用它,你能举个例子吗?
  • 我已经更新了原来的问题。

标签: python ssh environment-variables paramiko


【解决方案1】:

这样的?

command1 = 'set ASPERA_SCP_PASS={}'.format(os.environ['ASPERA_SCP_PASS'])

【讨论】:

  • 我已经更新了问题,现在我得到'exit status: 0',但是命令没有在远程服务器上运行。
  • 在上面运行这个命令我得到 raise KeyError(key) KeyError: 'ASPERA_SCP_PASS'
  • 请说明你在本地和远程机器上做什么。
  • 我在我的本地 OSX 机器上运行这个 python 脚本,并使用这个 python 脚本我试图通过 SSH 连接到 IP 地址为 10.0.0.1 的 Windows Server 机器,并运行一个命令行应用程序称为 ascp.exe。这个 ascp.exe 需要本地环境设置(在远程 Windows Server 机器上)。
  • 然后您可以将密码硬编码到您的代码中;还是有理由将其写入环境变量(这不是良好的安全实践......)。我放弃了;对不起;没有 Windows 经验。