最近在学习Oracle Cloud的实例远程ssh连接操作,本人是windows用户,使用免费的putty工具连接Oracle Cloud创建的实例。
一般情况下,直接创建一个

[email protected][实例公网IP]:22

的ssh链接,就可以直接连接到实例的控制台了。但是这种连接虽然比较方便和直接,响应速度也较快,但是有个不足就是如果实例重启时,ssh连接会直接断开,无法看到实例开机和关机的控制台输出。

Oracle Cloud提供了另一种连接方法,即用户可以自主创建的“控制台连接”,可以实现实例重启时,能够看到远程主机开关机的所有控制台输出。

具体创建方法是进入Oracle Cloud控制面板左上角菜单>计算>实例,点击已创建的实例名,进入实例详细信息。即可在页面左下方看到“控制台连接”,点击右侧的“创建控制台连接” ,随后上传连接所用的公钥文件,创建成功后,可以看到如下图:

点击右侧的三个点,选择使用SSH连接。
会弹出如下图窗口:

因为putty和安卓的connectbot不支持直接生成类似ssh -H %h:%p这种直接映射stdin和stdout的连接,所以我们这里选择windows平台,点击下方的复制连接,可以把连接字符命令复制出来。

类似如此:

Start-Job { Echo N | plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -ssh -P 443 -l [控制台连接OCID] -L 22000:[实例OCID]:22 instance-console.[区域].oraclecloud.com }; sleep 5; plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -P 22000 localhost -l [实例OCID]

分解来看,实践上执行两部操作:
第一步:

plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -ssh -P 443 -l [控制台连接OCID] -L 22000:[实例OCID]:22 instance-console.[区域].oraclecloud.com

通过此后台命令建立一个22000本地端口的映射;需要注意的是,“$env:homedrive$env:homepathociconsole.ppk”就是适用于putty的私钥文件,和刚才创建控制台连接用的公钥文件对应。例如:c:\users\[用户名]\oci\console.ppk。如果提示格式不正确,可以使用安装版的putty自带的puttygen程序把私钥文件转换成putty适用用的ppk文件。

第二步:

plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -P 22000 localhost -l [实例OCID]

等待5秒后,直接用实例OCID作为用户名登录本地localhost:22000端口。

因为本人是初学者,使用windows的powershell在执行直接给出的代码时,提示:

FATAL ERROR: Network error: Connection refused

后来分步执行后,发现是我的私钥“$env:homedrive$env:homepathociconsole.ppk”拥有密码,前面的Echo N命令直接导致没有输入密码,所以连接被拒绝。
因此,就把代码做出如下修改:

Start-Job { Echo [私钥密码] | plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -ssh -P 443 -l [控制台连接OCID] -L 22000:[实例OCID]:22 instance-console.[区域].oraclecloud.com }; sleep 5; plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -P 22000 localhost -l [实例OCID]

果然可以连上了,不过我不习惯用plink,更喜欢用putty,所以又进一步把代码改为:

Start-Job { Echo [私钥密码] | plink.exe -i $env:homedrive$env:homepath\oci\console.ppk -N -ssh -P 443 -l [控制台连接OCID] -L 22000:[实例OCID]:22 instance-console.[区域].oraclecloud.com }; sleep 5; putty.exe -i $env:homedrive$env:homepath\oci\console.ppk -P 22000 localhost -l [实例OCID]

把这段代码末尾换行加上一句pause,用记事本保存为*.ps1脚本文件,下次需要使用putty连接时,直接右键点击该文件,选择“使用 Powershell运行”,等待几秒钟,即可直接使用putty连接上Oracle Cloud实例的“控制台连接”。

这种连接方式实际上属于SSH隧道的方式。即在本地创造一个端口映射到远程主机,随后连接本地指定端口即可完成ssh连接。

理解这这种连接方法后,就可以同理在安卓的connectbot app中实现连接了,总共需要以下几步操作:

步骤一:打开connectbot,点击右上角的三个点点,选择管理公钥,然后点击右上角文件夹图标,导入私钥文件。然后点击左上角箭头返回。

步骤二:点击右下角加号图标,新建一个连接,点击“用户名@主机名:端口”右侧的下箭头展开,用户名框内输入上面代码第一步里的“[控制台连接OCID]”,主机输入“instance-console.[区域].oraclecloud.com”,端口输入“443”,下方的使用公钥验证选择自己的私钥文件,开始shell会话开关设置为“关闭”,最后点击右上角的加号保存连接。

步骤三:
然后长摁刚才保存的连接,在弹出菜单中选择“编辑端口转发”,进入端口转发界面,点击右下角的加号,弹出的窗口中,转发类型选“本地”,源端口设置一个合适的值,比如22000,目标端口,输入上面putty连接第一步代码里的“[实例OCID]:22”,最后点击创建端口转发。然后点击左上角箭头返回连接列表。

步骤四:
再次点击右下角加号,新建一个连接,点击“用户名@主机名:端口”右侧的下箭头展开,用户名框内输入上面代码第二步里的“[实例OCID]”,主机输入“localhost”,端口输入第二部设置的“22000”,下方的使用公钥验证选择自己的私钥文件,最后点击右上角加号,创建连接。

至此创建工作就完成了。

使用方法就是先点击步骤二创建connectbot连接,输入私钥的密码后,点击返回键,在保持连接的情况下返回连接列表,再点击步骤四创建的localhost连接,输入密码后,敲击回车即可实现connectbot连接Oracle Cloud实例的“控制台连接”。

PS:文中中括号扩住的内容都是需要大家自己替换成自己的内容。