今天折腾了一整天 OpenShift,早就听说 OpenShift 的大名,却一直无缘一试。从今天早上 10 点到现在(下午5点30分),终于摸透了 Mac 下使用 Terminal(终端)SSH 登陆 OpenShift 的方法,记下来与大家分享。
什么是 OpenShift
由大名鼎鼎的 RedHat 推出的一款 PaaS 服务,有免费的 Plan,支持创建 3 个应用,支持 PHP、Pyhton、Ruby、NodeJS 等语言。
使用 SSH 连接 OpenShift
阅读下面的文字假设你已有以下准备:
- 已经注册 OpenShift 账号,并创建了一个 Gear(即一个应用)
- 使用 Mac OS X 10.6 及更高版本的系统
- 了解 vim 的基本使用方法
- 已经通过终端安装了 rhc(OpenShift 的部署工具,安装指令 gem install rhc)
首先,先使用 rhc 检测一下当前的状态,打开终端,输入
rhc-chk
需要先输入你的 OpenShift 对应的密码,回车。
一般会遇到如下的结果:
Password: *
Analyzing system
….F.F
=================================================
|| Your system did not pass all of the tests ||
=================================================
1) Your public key is not loaded into a running ssh-agent: /var/root/.ssh/id_rsa.pub
If this is your only error, your connection may still work, depending on your SSH configuration.
2) Cannot SSH into your app: xxxxx-ooooo.rhcloud.com.
需要明确的是,如果你运行 rhc-chk 一切正常,那么就无需继续看下去了,直接使用原本的 git / ssh 的操作指令进行管理和部署即可。
下面的内容针对解决上述两个问题。
问题 1:Your public key is not loaded into a running ssh-agent
首先我们需要创建 SSH 需要用到的公钥和私钥
如果你已经创建,可以使用如下命令查看:
ls ~/.ssh/
若结果找两个形如 xx_rsa 和 xx_rsa.pub 两个文件则不需要执行如下的生成步骤,否则继续
输入命令
ssh-keygen
一路回车,最后会提示成功创建
下面需要为秘钥和目录设置正确的权限
依次输入命令:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
这样就设置了正确的权限。
将公钥内容提交到 OpenShift 控制面板
输入如下命令
vim ~/.ssh/id_rsa.pub
会打开刚才生成的秘钥中公钥的内容,全选复制。打开 OpenShift 控制面板
https://openshift.redhat.com/app/account
将全部内容粘贴到右下角【Public Keys】的那个文本框里。若已经提交了公钥,则建议删除现有的公钥再提交新的公钥。
接下来添加 ssh key 到 ssh-agent 中
输入如下命令
ssh-add ~/.ssh/id_rsa
控制台回返回如下信息:
Enter passphrase for /var/root/.ssh/id_rsa:
之前我们在创建秘钥时并没有设置 passphrase,所以直接按回车即可。系统返回:
Identity added: /var/root/.ssh/id_rsa (/var/root/.ssh/id_rsa)
一劳永逸,将 key 添加到 config 中
打开控制台,输入如下指令
vim ~/.ssh/config
在打开的新界面立输入以下内容(提示,按下 i 键进入编辑模式,按下 ESC 键退出编辑模式,按下 :wq 保存退出…… 说过了要有 vim 基础的哈)
Host .rhcloud.com
IdentityFile ~/.ssh/id_rsa
VerifyHostKeyDNS yes
StrictHostKeyChecking no
保存后整个为 ssh 添加秘钥的过程就就解决了。现在再运行 rhc-chk 命令肯定不会再出现 Your public key is not loaded into a running ssh-agent 这样的错误了。
问题2:Cannot SSH into your app: xxxxx-ooooo.rhcloud.com.
其实这个问题很简单,你的这个应用的 IP 地址 SSH 被封了,虽然能 ping 通,但是 SSH 连不上。
解决方法:删除这个应用,重新创建。