ssh master - su를 원격으로 실행

ssh master - su를 원격으로 실행

S연결해야 하는 서버가 있습니다.

S사용자로 제어 호스트에 연결하고 몇 asdf가지 작업을 수행합니다.

ssh -N -f -M -o ControlPath=$SSHSOCKET ${USER}@${IP} -p ${PORT} -i id_rsa
ssh -to ControlPath=$SSHSOCKET ${USER}@${IP} -p ${PORT} "su -c whoami && hostname && exit"

예상대로 작동하지만 두 번째 줄에 비밀번호를 입력해야 합니다.

다음과 같이 수정하려고 합니다.

echo 'qwerty' | ssh -t -to ControlPath=$SSHSOCKET ${K3_USER}@${IP} -p ${PORT} "su -c whoami && hostname && exit"

그러나 상황은 더욱 악화됩니다.

muxserver_accept_control: tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
Password:

나에게는 먼저 ssh를 사용해야 했다 asdf. 또한 다른 SSH 제어 마스터 연결을 설정할 수 없습니다. 또한 대상 컴퓨터의 구성을 수정할 수도 없습니다.

어떻게 든 루팅하려면 SSH가 필요합니다. 어떤 아이디어가 있나요?

답변1

전통적으로 대화형 비밀번호 문제는 expect중간 의사 tty를 생성하여 프로세스와 통신하는 명령을 사용하여 해결되었습니다. 이는 동등한 python-pexpect 패키지를 사용하는 대체 Python 버전입니다. Python 파일 run.py를 만듭니다.

import sys,pexpect
(pw,cmd) = sys.argv[1:]
child = pexpect.spawn(cmd)
child.expect(r'(?i)Password:')
child.sendline(pw)
print child.read()

비밀번호와 명령을 인수로 사용하여 실행하십시오.

python run.py  'qwerty' 'ssh -t -o ControlPath=$SSHSOCKET ${K3_USER}@${IP} -p ${PORT} "su -c whoami && hostname"'

관련 정보