직장에서는 SSH를 통해 원격 시스템에 액세스하고 LDAP 로그인을 통해 일부 웹 인터페이스에 액세스합니다. 1password를 사용하여 비밀번호를 관리하지만 비밀번호 관리자에서 SSH로 비밀번호를 입력하는 쉬운 방법을 찾지 못하는 것 같습니다. 나는 그것을 보았지만 보안이 매우 좋지 않아 내 경우에도 작동하지 않는 sshpass
비밀번호를 표시할 수 있습니다 . ps
외부 프로그램이나 스크립트에서 SSH를 통해 직접 비밀번호를 입력할 수 있는 방법이 있습니까? 아니면 비밀번호를 동기화하고 활용하는 SSH 도구가 있습니까? 예를 들어 SSH에 대해 잠금 해제한 것과 동일한 비밀번호로 키 파일을 보관하고 비밀번호를 업데이트할 때마다 파일이 업데이트됩니다. 키를 지원하도록 구축되지 않았기 때문에 키를 사용하여 시스템에 직접 로그인할 수 없습니다.
sshpass
편집: 댓글 작성자는 비밀번호가 에 표시될 것이라고 지적했는데 ps
이는 좋지 않습니다. 또한 여전히 키를 사용하여 시스템에 로그인되어 있기 때문에 ssh
이와 같은 별칭을 직접 지정할 수 없습니다 .sshpass ... ssh
sshpass
편집 2: 비밀번호 관리자가 정상임을 확인하고 파일 설명자를 사용하여 서버에 로그인하려고 시도했지만 작동하지 않는 것 같습니다. RSA 토큰을 묻는 메시지가 표시되는 대신 RSA 토큰을 묻는 메시지가 표시됩니다. 아무것도 얻지 못한다면 동일한 코드를 실행하지 않고 이를 받아들이지 않을 것이라고 생각하게 됩니다 sshpass
.
답변1
sshpass
ps에 비밀번호를 표시할 필요는 없습니다. 환경 변수로 읽을 수 있습니다.
SSHPASS=12345 sshpass -e ssh user@host
또는 파일에서:
sshpass -f /path/to/password_file ssh user@host
답변2
내 sshpass에는 -f
파일에서 읽는 옵션이 있습니다. 따라서 bash 프로세스 교체를 통해 할 수 있습니다
sshpass -f <(myscript_call_1password) ssh host
답변3
sshpass
내 작업 설정과 작동하지 않았고 다른 명령을 사용하여 로그인하고 싶지 않았기 때문에 결국 다른 경로로 이동했습니다. expect
SSH 구성 매개변수와 Node 스크립트의 조합을 사용하여 LocalCommand
비밀번호를 얻었습니다. 바라보다LocalCommand에서 SSH를 종료할 수 있습니까?게다가.
본질적으로 내 솔루션은 다음과 같습니다.
Host work
내 컴퓨터를 가리키는 SSH 호스트를 설정합니다HostName
.HostName localhost
구성 에
PermitLocalCommand yes
및 추가LocalComamnd <path to my expect script>; kill $PPID
Host
예상 스크립트를 사용하여 다음을 수행합니다.
내 Node 스크립트를 실행하면 내 비밀번호를 가져와 변수에 저장합니다.
예상 기간 동안 저장된 비밀번호를 사용한 후 상호 작용하세요(아래 참조)
SSH 세션이 완료되면
LocalCommand
실행되어kill $PPID
원래 터미널 세션으로 돌아갑니다.
내 샘플 expect
스크립트는 다음과 같습니다.
set password [exec node <script>]
spawn -noecho ssh <work_host>
expect "Password"
send "${password}\n"
interact
답변4
자동화 및 키 입력 제거에 대한 원래 질문에 대답하려면 다음을 수행하십시오.
그렇긴 한데,
sshpass
실행sshpass
하기 전에 명령을 입력해야 해서ssh
좀 불편하네요.
귀하의 의견을 토대로:
1password 데이터베이스와 통신하는 스크립트가 있으므로 이 스크립트를 SSH와 통합하고 싶습니다.
별칭을 정의합니다(예: bash에서):
alias ssh='sshpass -p$(<your_script>) ssh'
일반 ssh
통화로 사용하세요.