열린 SSH 연결을 유지하고 쉘 스크립트에서 이를 사용하는 방법은 무엇입니까?

열린 SSH 연결을 유지하고 쉘 스크립트에서 이를 사용하는 방법은 무엇입니까?

현재 나는 다음과 같이 전화하고 있습니다 :

$ ssh [email protected] my_cmd

이는 속도가 느리고 안전하게 자동화하기가 쉽지 않습니다. SSH 연결을 설정하고 내 명령을 host.com으로 전달하고 출력을 인쇄하는 스크립트를 갖고 싶습니다.

그게 가능합니까?

내 컴퓨터를 Authorized_keys에 추가하는 것은 나에게 옵션이 아니며 속도 저하 문제를 해결하지 못합니다.

답변1

ControlMaster이 기능을 기존 채널에서의 멀티플렉싱 이라고 합니다 . 이로 인해 ssh는 모든 키 교환을 수행하고 한 번만 로그인하므로 후속 명령이 더 빠르게 실행됩니다. 다음 세 줄을 사용하여 활성화할 수 있습니다 .ssh/config.

Host host.com
  ControlMaster auto
  ControlPath ~/.ssh/master-%C
  # for openssh < 6.7 you need to use this one:
  # ControlPath ~/.ssh/master-%r@%h-%p
  ControlPersist 5m

필요에 맞게 이를 조정할 수 있습니다. 또는 다른 명령을 실행하는 동안 열려 있는 기본 연결을 열 수 있습니다 ControlPersist.

이 기능을 조정할 수 있는 가능성은 많지만 ControlPath다른 사용자가 읽을 수 없거나 남용할 수 없는 안전한 장소에 소켓을 보관하십시오.

자세한 내용은 ssh_config(5)매뉴얼 페이지에서 확인할 수 있습니다.

답변2

기계를 제어하고 작업을 자동화할 수 있다면 Authorized_keys에 키를 추가할 수 없는 이유는 무엇입니까?

ssh-copy-id -i ~/.ssh/foo [email protected]

이렇게 하면 연결할 때마다 비밀번호를 입력할 필요가 없습니다.

control master가장 큰 문제가 연결하는데 시간이 오래 걸린다면 SSH 구성에 추가하여 단일 연결을 재사용할 수 있습니다. 해당 연결을 계속 실행하면 후속 연결이 거의 즉각적으로 이루어집니다.

Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600

https://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections

장기적으로 작업을 자동화하는 경우 다음과 같이 연결해 주는 자동화 프레임워크를 사용하는 것이 더 나을 수 있습니다.

관련 정보