将参数传递给本地存储的 bash 脚本,需要使用 Python Paramiko 在远程计算机上执行
Pass arguments to a bash script stored locally and needs to be executed on a remote machine using Python Paramiko
我有一个 shell 脚本存储在我的本地机器上。该脚本需要如下参数:
#!/bin/bash
echo
echo
我需要在远程机器上运行这个脚本(无需在远程机器上复制脚本)。我正在使用 Python 的 Paramiko 模块来 运行 脚本并且可以毫无问题地在远程服务器上调用。
问题是我无法将这两个参数传递给远程服务器。这是我的 python 代码片段,用于在远程服务器上执行本地脚本:
with open("test.sh", "r") as f:
mymodule = f.read()
c = paramiko.SSHClient()
k = paramiko.RSAKey.from_private_key(private_key_str)
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect( hostname = "hostname", username = "user", pkey = k )
stdin, stdout, stderr = c.exec_command("/bin/bash - <<EOF\n{s}\nEOF".format(s=mymodule))
使用 bash 我可以简单地使用以下命令:
ssh -i key user@IP bash -s < test.sh "$var1" "$var2"
有人可以帮助我如何使用 Python 将两个参数传递给远程服务器吗?
做同样的事情,你在 bash
:
command = "/bin/bash -s {v1} {v2}".format(v1=var1, v2=var2)
stdin, stdout, stderr = c.exec_command(command)
stdin.write(mymodule)
stdin.close()
如果您更喜欢 heredoc 语法,则需要使用单引号,如果您希望扩展参数:
command = "/bin/bash -s {v1} {v2} <<'EOF'\n{s}\nEOF".format(v1=var1,v2=var1,s=mymodule)
stdin, stdout, stderr = c.exec_command(command)
与在 bash:
中使用引号的方式相同
ssh -i key user@IP bash -s "$var1" "$var2" <<'EOF'
echo
echo
EOF
尽管您在 Python 代码的变量中有脚本,但为什么不直接修改脚本本身呢?那会更直接,imo.
强制性警告:请勿使用 AutoAddPolicy
– 您正在失去针对 MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".
的保护
我有一个 shell 脚本存储在我的本地机器上。该脚本需要如下参数:
#!/bin/bash
echo
echo
我需要在远程机器上运行这个脚本(无需在远程机器上复制脚本)。我正在使用 Python 的 Paramiko 模块来 运行 脚本并且可以毫无问题地在远程服务器上调用。
问题是我无法将这两个参数传递给远程服务器。这是我的 python 代码片段,用于在远程服务器上执行本地脚本:
with open("test.sh", "r") as f:
mymodule = f.read()
c = paramiko.SSHClient()
k = paramiko.RSAKey.from_private_key(private_key_str)
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect( hostname = "hostname", username = "user", pkey = k )
stdin, stdout, stderr = c.exec_command("/bin/bash - <<EOF\n{s}\nEOF".format(s=mymodule))
使用 bash 我可以简单地使用以下命令:
ssh -i key user@IP bash -s < test.sh "$var1" "$var2"
有人可以帮助我如何使用 Python 将两个参数传递给远程服务器吗?
做同样的事情,你在 bash
:
command = "/bin/bash -s {v1} {v2}".format(v1=var1, v2=var2)
stdin, stdout, stderr = c.exec_command(command)
stdin.write(mymodule)
stdin.close()
如果您更喜欢 heredoc 语法,则需要使用单引号,如果您希望扩展参数:
command = "/bin/bash -s {v1} {v2} <<'EOF'\n{s}\nEOF".format(v1=var1,v2=var1,s=mymodule)
stdin, stdout, stderr = c.exec_command(command)
与在 bash:
中使用引号的方式相同ssh -i key user@IP bash -s "$var1" "$var2" <<'EOF'
echo
echo
EOF
尽管您在 Python 代码的变量中有脚本,但为什么不直接修改脚本本身呢?那会更直接,imo.
强制性警告:请勿使用 AutoAddPolicy
– 您正在失去针对 MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".