동일한 스크립트에서 두 개의 ssh 명령을 사용한 다음 다른 명령을 계속 사용하는 방법은 무엇입니까?

동일한 스크립트에서 두 개의 ssh 명령을 사용한 다음 다른 명령을 계속 사용하는 방법은 무엇입니까?

내 데이터베이스에 로그인하려면 매번 다음 단계를 따르세요.

ssh [email protected] 
password: 

연결되면 동일한 터미널에서 로컬 데이터베이스 서버에 로그인합니다.

ssh database_name 
password:

그런 다음 su를 수행합니다.

su - appuser

다음으로 실제로 sqlplus에 연결합니다.

sqlplus ..

Unix 스크립트를 사용하여 이를 자동화하려고 하는데 다음 사항을 알 수 없습니다.

  1. 동일한 스크립트에서 2개의 SSH를 사용하는 방법
  2. "ssh Database_name"으로 가서 비밀번호를 입력할 수 있지만 제어권이 터미널로 돌아가고 나머지 스크립트는 실행되지 않습니다.
  3. 두 번째 ssh 이후에는 su 명령을 인수로 시작하여 나머지 명령을 전달해야 한다는 것을 알고 있지만 어떻게 해야 할지 모르겠습니다.

답변1

이에 대한 나의 접근 방식은 두 가지입니다. 먼저 ssh-keygen주석에서 @Avinash가 언급한 방법을 통해 SSH에 대한 비밀번호 없는 키 로그인을 구성하십시오. 둘째, expect두 개의 SSH 세션을 단계별로 실행하고 시작한 sqlplus다음 제어권을 터미널로 되돌립니다.

답변2

이와 같은 것과 비밀번호 없는 공개 키 인증이 트릭을 수행해야 합니다.

# create an ssh connection for tunneling only, in the background (this assumes tunneling is allowed... usually is)
ssh -N -L 9999:database_name:22 [email protected] &
pid=$!

# connect to the 2nd machine directly, using the tunnel, also run only the sqlplus command. (this assumes sudo is installed)
ssh -oPort 9999 localhost sudo -u appuser sqlplus ..

kill $pid

첫 번째 명령은 ~/.ssh/config의 특수 구성으로 대체될 수 있습니다. 예는 다음과 같습니다.

Host mytunnel
    User unix_id
    Hostname something.com
    LocalForward 9999 localhost:22

Host sqlviatunnel
    User unix_id
    Hostname localhost
    Port 9999
    ProxyCommand ssh -q -W %h:%p mytunnel

그런 다음

ssh sqlviatunnel

sqlviatunnel의 이름을 더 짧은 이름으로 바꿉니다.

관련 정보