내 데이터베이스에 로그인하려면 매번 다음 단계를 따르세요.
ssh [email protected]
password:
연결되면 동일한 터미널에서 로컬 데이터베이스 서버에 로그인합니다.
ssh database_name
password:
그런 다음 su를 수행합니다.
su - appuser
다음으로 실제로 sqlplus에 연결합니다.
sqlplus ..
Unix 스크립트를 사용하여 이를 자동화하려고 하는데 다음 사항을 알 수 없습니다.
- 동일한 스크립트에서 2개의 SSH를 사용하는 방법
- "ssh Database_name"으로 가서 비밀번호를 입력할 수 있지만 제어권이 터미널로 돌아가고 나머지 스크립트는 실행되지 않습니다.
- 두 번째 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의 이름을 더 짧은 이름으로 바꿉니다.