![](/img/trans.png)
[英]Executing passwd command in Python Paramiko to change a password on a Linux server
[英]How to insert a password or some other string into a running shell command on a Linux server using Paramiko?
我有一組服務器數據,我需要在它們上運行一系列命令
在命令seid keys add WALLET_NAME
,我需要輸入密碼,我該怎么做?
import paramiko
import time
def send_command(
ip,
username,
password,
monikername,
walletname,
nodepass,
commands,
short_pause = 1,
long_pause = 5,
):
cl = paramiko.SSHClient()
cl.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cl.connect(
hostname=ip,
username=username,
password=password,
look_for_keys=False,
allow_agent=False,
)
with cl.invoke_shell() as ssh:
for command in commands:
ssh.send(f"{command}\n")
ssh.settimeout(5)
if __name__ == "__main__":
commands = [
"sudo apt update && sudo apt upgrade -y",
'ver="1.18.1" && \
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \
sudo rm -rf /usr/local/go && \
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \
rm "go$ver.linux-amd64.tar.gz" && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \
source $HOME/.bash_profile && \
go version',
"git clone https://github.com/sei-protocol/sei-chain.git && cd sei-chain",
"git checkout 1.0.6beta",
"make install",
"seid version --long | head",
"seid init MONIKERNAME --chain-id atlantic-1",
"seid keys add WALLET_NAME",
"seid add-genesis-account WALLET_NAME 100000000usei",
'seid gentx WALLET_NAME 100000000usei \
--chain-id atlantic-1 \
--commission-rate=0.1 \
--commission-max-rate=0.2 \
--commission-max-change-rate=0.1 \
--pubkey $(seid tendermint show-validator) \
--moniker "MONIKERNAME"',
"cat ~/.sei/config/gentx/gentx-*"
]
result = send_command(ip, username, password, monikername, walletname, nodepass,commands)
print(result)
對於帶有服務器數據的數組,我執行這樣的循環
for key in data:
ip = key['ip']
username = key['username']
password = key['pass']
monikername = key['monikername']
walletname = key['walletname']
nodepass = key['nodepass']
result = send_command(ip, username, password, monikername, walletname,
nodepass, commands)
您正在使用“shell”通道來執行命令。
shell是一個帶有輸入和輸出的黑盒。 因此,您不是“將密碼或其他字符串插入正在運行的腳本中” 。 您只是在 shell 中提供連續的輸入流。 從您的 API 的角度來看,輸入是命令還是命令的輸入幾乎無關緊要。 因此,命令輸入很容易成為“命令列表”中的另一個條目。
"seid keys add WALLET_NAME",
"password",
雖然請注意,使用“shell”通道自動執行命令是一種錯誤的方法。 請參閱Paramiko 上的 exec_command 和使用 invoke_shell() 發送有什么區別?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.