要登录我的数据库,我每次都会遵循以下步骤:
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
像这样的东西,再加上无密码的 pubkey auth 应该可以解决问题:
# 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 重命名为更短的名称。