팁(클라이언트 측에서 파일/비밀번호를 암호화하는 방법):
# encrypt pwd with ssh key:
openssl rsa -in ~/.ssh/id_rsa -outform pem > ~/.ssh/TEMP-id_rsa.pem 2>/dev/null
openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > ~/.ssh/TEMP-id_rsa.pub.pem 2>/dev/null
echo $PWDHERE > ~/.ssh/TEMP.pwd
openssl rsautl -encrypt -pubin -inkey ~/.ssh/TEMP-id_rsa.pub.pem -in ~/.ssh/TEMP.pwd -out ~/.ssh/TEMP.pwd.enc 2>/dev/null
rm ~/.ssh/TEMP.pwd > /dev/null 2>&1
# decrypt:
PWDHERE=`openssl rsautl -decrypt -inkey ~/.ssh/TEMP-id_rsa.pem -in ~/.ssh/TEMP.pwd.enc`
따라서 .. 서버 측 루트 사용자를 사용하여 서버에서 SSH를 통해 명령 실행을 자동화하는 것은 매우 간단한 작업이 될 것입니다. (결국 우리는 루트 사용자를 사용하여 서버 측 데스크톱 시스템에서 스크립트를 실행해야 합니다. 자동화 명령만 알면 충분합니다. 거기에서 우리는 이것을 할 수 있습니다..).
하지만:문제는먼저 서버에서 "sudo su -"를 수행하고 거기에 비밀번호를 제공해야 하는 경우 루트로 명령 실행을 안전하게 자동화할 수 있나요?
업데이트: sudoers 파일 수정은 옵션이 아닙니다. (어쩌면 인형이 이것을 할 수 있을까요?)
업데이트 #2:
echo myPassword | sudo -S ls /tmp
AFAIK는 안전하지 않습니다. (다른 사용자가 'ps -ef'를 하면 잠시 동안 비밀번호를 볼 수 있기 때문일까요?) 따라서 이것도 해결책이 아닙니다.
업데이트 #3: "임시 명령을 사용하여 기계를 원격으로 제어"하고 싶습니다.
답변1
당신이 하려는 일은 그 자체가 벌레이므로 해서는 안 되는 일입니다.
이를 고려하여 "안전"에 대한 요구 사항을 재고하고 싶을 수도 있습니다. 왜 귀찮게 합니까 sudo
? 루트 로그인을 허용하지만 공개 키 인증만 사용하는 (두 번째) SSH 서버를 설정할 수 있습니다. 이렇게 하면 비밀번호를 전혀 전송할 필요가 없으며 루트로 로그인하고 명령을 실행하기만 하면 됩니다. 당신은 간단하게 할 수 있습니다
- 에 저장되어 있을 가능성이 가장 높은 현재 SSH 서버의 구성을 복사합니다
/etc/ssh/sshd_config
. - 다음으로 수정하세요
- 루트 로그인 허용,
- 공개 키 인증을 허용합니다.
- 비밀번호 확인을 거부하고,
- 666과 같은 다른 포트에서 수신 대기하도록 하세요.
sshd
새 대체 구성 파일을 사용하여 새 인스턴스를 시작하려면 이 옵션을 사용합니다-f
.
ssh root@server -p 666 "ls -la /"
그런 다음 sudo 및 비밀번호 없이 데스크탑 시스템에서 인증 할 수 있도록 공개 키 인증을 설정하십시오 .
짐을 꺼내보세요 :-)
답변2
이것은 최선의 방법이 아니다. 그러나 귀하의 접근 방식은 귀하가 주장하는 결함으로 인해 어려움을 겪지 않습니다. 당신이 달릴 때
echo myPassword | sudo -S ls /tmp
비밀번호는 외부 명령에 대한 인수로 표시되지 않습니다. 모든 쉘(일부 BusyBox 설치 제외 - 컴파일 옵션에 따라 다름)에는 비밀번호가 echo
내장되어 있습니다.
답변3
답변4
이것은 잘못된 접근 방식인 것 같습니다. 무엇을 하려는 건가요?
임시 명령을 사용하여 기계를 원격으로 제어한 다음 다음과 같은 것을 사용하십시오.csshx
또는 자동으로 루트가 cron을 통해 작업을 실행하도록 한 다음 서버에서 cron 작업을 설정하면 서버는 로그인하고 작업을 시작하기 위해 클라이언트 컴퓨터에 의존하지 않습니다.