Bash(및 기타 쉘)에서는 $() 및 ``(백틱)과 같은 것을 사용하여 명령줄에 명령 결과를 삽입할 수 있습니다.
이제 SSH 세션을 제외하고 이와 같은 것이 있으면 좋을 것입니다. 따라서 SSH 세션에 있고 자신의 컴퓨터에서 일부 정보가 필요하며 이를 연결된 시스템의 내부 명령줄에 입력하려고 합니다.
예를 들어, mysql 콘솔에 직접 액세스하고 싶다고 가정해 보겠습니다. 다음과 같은 명령을 사용할 수 있습니다.
ssh [email protected] "mysql -u blub -pmypass"
작동하지만 문제는 SSH 쉘 프로세스의 명령줄에서 비밀번호를 볼 수 있다는 것입니다.
이 보안 문제를 해결하기 위해 다음과 같은 것을 갖고 싶습니다.
ssh [email protected] "mysql -u blub -p\$(ssh-on-client 'cat pass-file')"
cat passfile
이는 서버가 아닌 SSH 클라이언트에서 실행됩니다 . 그런 것으로 알려진 게 있나요? 이를 수행하는 다른 방법이 있습니까?
업데이트: 내 예를 참조하는 답변에 감사하지만 실제 질문에 답변하지 않는 한 수락하지 않겠습니다. 즉, SSH 세션 내에서 SSH 클라이언트 컴퓨터와 통신할 수 있는지 여부입니다. (이것이 보안 문제를 일으킬 수 있다는 것을 알고 있습니다.)
가능한 해결책:
- 다시 연결할 클라이언트에 SSH 서버가 있습니다. (sweimann) 문제는 서버에 다시 연결하기 위한 자격 증명을 얻는 방법입니다.
- SSH로 터널을 생성하고 일부 netcat 스크립트/텔넷을 사용하여 서버에서 명령을 실행하고 결과를 다시 보냅니다.
- 쉘 스크립트를 작성하려면 예상을 사용하십시오. (잭 톰슨)
- 콘솔을 관찰하고 그에 따라 조치를 취하는 클라이언트의 SSH 주위에 사용자 정의 래퍼를 사용합니다. (삿포로)
- 이를 지원하려면 SSH를 패치하세요. 메일링 리스트에도 비슷한 패치가 있습니다사용 가능.
- 'SendEnv' 옵션이 있습니다.SSH원격 컴퓨터에 환경 변수를 설정합니다. 하지만 원격 SSHD에서 이 기능을 활성화해야 합니다.
답변1
사용하고 싶으신가요?예상하다이를 위해. 아마도 이미 귀하의 컴퓨터에 있을 것입니다. 모든 종류의 대화형 명령줄 자동화를 위한 표준 도구입니다. 이는 Tcl 라이브러리이므로 무료로 몇 가지 Tcl 기술을 얻을 수 있습니다. 조심하세요. 그것은 중독성이 있습니다.
#!/path/to/expect
spawn ssh [email protected] "mysql -u blub"
expect "*ssword:*"
send -- "mypass\r"
interact
답변2
답변3
나는 몇 년 전에 근본적인 문제를 조사해 왔습니다. SSH 세션 내부에서 SCP 다운로드를 트리거하고 싶었습니다. 문제와 마찬가지로 SSH 세션 내부에서 클라이언트의 일부 프로세스로 다시 통신해야 합니다.
세 번째 가능한 해결책은 다음과 같습니다. SSH 주변의 래퍼를 사용하여 연결합니다. SSH는 SSH의 출력을 스캔하고 패턴을 인식할 때 로컬로 특정 명령을 트리거합니다. 분명히 해킹이지만 트릭을 수행할 수도 있습니다.
나는 내 SSH 연결(예: )을 기억하는 수정된 버전의 /usr/bin/script를 얻었고 me@somehost
내 SSH 세션이 인쇄될 때마다 ###/some/absulte/path/to/file/on/host.txt###
로컬에서 실행됩니다.scp me@somehost:/some/absulte/path/to/file/on/host.txt .
간단한 쉘 스크립트를 사용하여 서버에서 패턴과 절대 경로를 편리하게 생성했습니다.
(내 코드는 실제로 조금 더 많은 기능을 수행했습니다. 다운로드한 파일에서 로컬 텍스트 편집기를 열고 파일이 수정되면 SCP를 사용하여 다시 업로드했습니다. 코드가 필요하면 알려주세요.)
그 이후로 나는 이것의 더 나은 구현을 찾고 있었지만 지금까지 찾지 못했습니다.
아마도 이 기술은 SSH를 둘러싼 래퍼 대신 SSH 프록시 명령(connect.c를 생각해 보세요)으로 구현될 수 있습니다.
답변4
터미널 세션을 에뮬레이트해야 합니다.
ssh -t [email protected] "mysql -u blub -p"
이 경우 암호화된 SSH 채널을 통해 네트워크를 이동하는 비밀번호를 묻는 메시지가 표시되며 이는 콘솔에 표시되지 않습니다.