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"'