最近在生产aws环境部署了支持http3的nginx集群(nginx+consul+upsync)。整个部署过程使用putty操作虚拟机,通过winscp上传下载文件。
写了一些操作笔记以及记录了我自己碰到的几个问题
PS:
由于是生产环境,所以所有的服务机器都是通过堡垒机登录的,并且设置了密钥
下面提到的服务器地址都是不能直接通过ssh命令直接连接的应用服务器地址
WINSCP
winscp的操作相对putty来说比较简单
然后点击确认和登录按钮就可以看到如下连接成功的提示
PUTTY
putty通过密钥登录内网机器
在aws两台机器,一台是可以是堡垒机,可以在任何点通过ssh命令访问,一台是内网机器,只能通过堡垒机使用SSH命令连接,其安全组配置如下:
由于要使用密钥进行登陆,需要先保存私钥到本地(如果是pem文件需要先通过puttygen转换成ppk文件)
1.将pem转化成ppk文件
打开puttygen并点击load,选择自己电脑上的pem公钥并打开,就可以看到如下图所示的导入成功的消息,然后点击保存私钥
的按钮,就可以得到对应的ppk文件
由于两台机器的登陆都需要私钥,而私钥只是存储在我本地,所以通过Pageant来保存私钥。
Pageant是PuTTY身份验证代理。 它可以私钥保存在内存中,以便我们可以在连接到服务器时使用它们。
2.添加私钥到Pageant
3. putty连接堡垒机
4.登陆堡垒机
通过ssh命令连接内网机器(aws上Red Hat的实例的默认登陆用户都是ec2-user)
putty做端口映射
在搭建nginx+consul+upsync集群的时候,为了安全性,所有的机器都仅可以通过堡垒机访问,consul集群通过私有子网来创建实例。这样一来,我们也不能直接通过consul服务端的ip+端口访问器web界面了,解决方案有三种:
- 1.通过nginx映射到外网,然后访问nginx的时候做登陆验证
- 2.使用consul 自己的ACL机制,设置token才可以访问 比较麻烦
- 3.通过putty的ssh隧道,在登陆堡垒机的时候做端口映射,先给与堡垒机访问consul ui的权限,然后通过端口映射到本地
最终我选择了第三种,既保证了安全性,配置起来也很简单,使用putty 登陆堡垒机就可以访问consul的页面
consul服务器ip:172.33.63.50,登陆后安装并启动consul
在本地通过127.0.0.1:8500端口就可以访问了— 注意是映射到的是本地的端口
通过SSH命令进行私钥转发
按照上述操作可以使用putty连接内网服务器,不过每次都需要输入ssh ec2-user@ip命令来连接服务器,也比较麻烦,查阅了下看看是否有其他更简单的方式来连接
其中一个办法就是把命令保存成shell文件,这样在使用的时候就会方便些,不需要再去看对应服务的IP了
思路也是一样的,先是通过ssh-agent 管理私钥;然后转发私钥来登陆内网服务器
1.通过ssh-add命令添加私钥
执行ssh-add时如果出现"Could not open a connection to your authentication agent"错误,则执行ssh-agent bash
命令
通过ssh-add -l命令我们可以看到对应的私钥已经被加入了
2.登陆内网服务器
ssh ec2-user@172.33.63.50 -p 22 -o ProxyCommand='ssh -p 22 ec2-user@54.238.43.140 -W %h:%p'
这条命令的意思是,我使用ec2-user用户,来经过堡垒机的认证,但是我登陆内网服务器则是使用ec2-user用户登录。前面的是目标服务器的信息,ProxyCommand里的是堡垒机的信息
为了便于简单,可以把上述信息写到配置文件~/.ssh/config
里边
Host consul-server1
HostName 172.33.63.50
Port 22
User ec2-user
ProxyCommand ssh -p 22 ec2-user@54.238.43.140 -W %h:%p
这样以后想要连接对应的服务器只要使用ssh + host 就可以了
不过通过ssh-add
命令添加的私钥只要关闭命令台就会失效了,每次都需要重新通过ssh-add
命令添加一下