1
10以上のリモートホスト上のファイルを更新する必要があります。私たちのシステムが設計された方法は、ユーザが$user
と言っているが、パスワードを持つリモートホストにsshが$ passwdと言うと、成功したログインを投稿する。$user
は(これは/etc/sudoers
で定義されている)リモートマシンへのSFTP、ルートに切り替えてリモートマシン上でコマンドを実行
私の問題は、私は私のスクリプトからsudo su - root
することができません、ということである、以下の私のコード
(注 - 私はすでにinvoke_shell()
とget_transport()
を試してみました。)である私はRECE
import paramiko, re, os
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
action_item = int(input("Welcome on-board ...\nPlease choose from following \n1 - Global Update\n2 - Specific Update\n Please input as 1 or 2 :"))
if action_item == 2:
hostName = input("Please provide 'IPADDRESS' of Specific Remote Client :")
os.system('touch /tmp/hosts_file_specific && umask 113 /tmp/hosts_file_specific')
os.system('hostName='+hostName+' && echo "$hostName" >> /tmp/hosts_file_specific')
hosts_file = r'/tmp/hosts_file_specific'
elif action_item == 1:
hosts_file = r'/etc/hosts'
else:
print("Invalid input, shutting down the application")
with open(hosts_file) as file:
for line in file:
line = re.findall(r'[0-9]+(?:\.[0-9]+){3}',line)
if len(line) > 0:
line = line[0]
else:
line = '127.0.0.1'
if line == '127.0.0.1':
pass
else:
print("Trying to connect - "+line)
try:
ssh_client.connect(hostname=line,username=$user,password=$passwd)
stdin,stdout,stderr=ssh_client.exec_command("pgrep mttrapd")
outData = stdout.readlines();
outData = re.findall(r'[0-9]+',outData[0])
outData = int(outData[0])
print("[Probe = nco_p_mttrapd] and PID = ",outData)
except TimeoutError:
outData = -1
pass
if outData > 0:
ftp_client = ssh_client.open_sftp()
localfilepath1 = r"/tmp/Python_361/rules.tar"
remotefilepath1 = r"/tmp/rules.tar"
ftp_client.put(localfilepath1,remotefilepath1)
ftp_client.close()
stdin, stdout, stderr = ssh_client.exec_command('sudo su - root')
stdin.write("\n")
stdin.flush()
stdin, stdout, stderr = ssh_client.exec_command("whoami")
print(stdout.readlines())
elif outData == -1:
print("Host is unreachable - Please contact your network administrtor, nothing to do")
else:
print("mttrapd probe is not running on this host, nothing to do")
file.close()
出力
Welcome on-board ...
Please choose from following
1 - Global Update
2 - Specific Update
Please input as 1 or 2 :2
Please provide 'IPADDRESS' of Specific Remote Client :x.x.x.x
Trying to connect - x.x.x.x
[Probe = nco_p_mttrapd] and PID = 12345
['$user\n']
Trying to connect - x.x.x.x
[Probe = nco_p_mttrapd] and PID = 12345
**['$user\n'] #--------> I need this to be ['root\n']**
コマンドを実行して終了します続行する。おそらくhttps://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etc – tripleee
を参照してください。* sudo su - sudo su - root * ?任意のエラー? –
スクリプト(私の場合はリモート)からsudo su - rootを実行すると、rootとしてコマンドを実行できません。最初にsudo su - rootを実行した後、同じスクリプトからwhoamiを実行し、whoamiへの出力がルートになることを期待するスクリプトがあると考えてください。しかし、私の場合、whoamiは私に$ userを与え、rootではないことを問題にしています。これが説明したいと思っています... –