远程服务器使用基础¶
导言¶
由于在实际的开发环境中,远程服务器的操作系统通常为linux的发行版,因此在接触远程服务器前,最好对linux的使用有一定的了解。没有基础可以看看这个教程:OverTheWire: Bandit,其通过类似CTF的方式让初学者了解linux的各种常用命令。网络上也有针对此教程的writeUp
初次ssh登陆¶
使用远程服务器的方式一般有两种:通过官方控制台或在本地使用ssh(Secure Shell)连接。
官方控制台¶
一般情况下,提供云服务器租凭的运营商都会在服务器的实例界面提供它们的网页控制台,即运行在网页上的服务器终端(本质上也是ssh,但使用密码进行鉴权)。如果不嫌弃,直接使用也是没有问题的。但官方的控制台通常无法很好地调整个人的偏好设置,因此除去特殊情况,我个人并不推荐直接使用官方控制台进行操作。
ssh连接¶
ssh密钥配置¶
1.生成密钥对 打开终端,输入以下内容生成密钥对:
ssh-keygen -t ed25519 -C "webserver0" -f ~/.ssh/webserver0
这里的-C
参数可以是任何具有标识作用的字符串,例如上面的设备名称、电子邮箱地址等;-f
参数用于指定密钥对存放的路径及文件名。
生成密钥主要是为了方便未来的频繁连接,可以不用在连接时频繁输入登陆密码。
2.向服务器添加公钥
在终端中输入命令:
ssh-copy-id username@server_ip
该命令会自动将本地主机所有公钥的内容复制到服务器的authorized_keys
文件中。如果服务器返回信息显示没有这个工具,也可以通过上面提到的官方控制台手动将对应的公钥内容复制粘贴到服务器上。
如果提示无密钥:
/usr/bin/ssh-copy-id: ERROR: No identities found
ssh-copy-id -i ~/.ssh/webserver0.pub username@server_ip
建立ssh连接¶
建立ssh连接可以直接在本地终端执行,也可以借助第三方工具,如PuTTY
、vscode
等。
第三方工具一般都会有详细的文档可供参考,这里我们介绍终端连接。
在终端输入以下命令:
ssh username@server_ip -p port_num
其中,-p
参数为可选参数,当服务器的ssh服务没有运行在默认的22号端口,就需要通过-p
参数指定端口号。
按照终端返回的提示进行信息确认或填充,例如首次连接时的主机信任提示、用户密码(若未启用密钥认证)等。看到服务器的命令提示符,则表明连接成功。
ssh配置文件¶
位于本地主机路径~/.ssh
下,有一个config
文件(若无可创建一个)。该文件可用于配置常用的ssh连接参数,示例配置如下:
Host webserver # 自定义主机名
User admin # 登陆用户
HostName 5.101.5.101 # 服务器ip
IdentityFile ~/.ssh/webserver # ssh私钥
LocalForward 8888 localhost:8080 # 端口转发配置(将服务器8888端口的服务信息转发至本地主机的8080号端口)
基于以上配置,未来作为用户admin
登陆远程主机5.101.5.101
时,远程服务器上8888号端口的服务内容会通过ssh服务自动转发至本地主机的8080号端口,可通过浏览器访问网址localhost:8080
查看服务内容(前提是服务器那的8888端口上运行有可通过浏览器访问的服务);并且在建立连接或使用文件传输(scp)时可使用以下简化命令:
ssh webserver
scp webserver:/path/to/source /path/to/target
scp /path/to/source webserver:/path/to/target
初始化操作¶
用户管理¶
初次登陆服务器时,一般默认为root
用户,即最高权限用户/根用户。为了避免误操作导致系统损坏,我们需要新建一个普通用户以用于日常开发。
在linux中新建用户通常有两种方式:useradd
和adduser
,区别在于后者会自动创建用户主目录并设置默认的用户信息,前者需要手动设置。这里我们仅使用后者举例:
sudo adduser admin
根据终端提示输入信息或回车跳过。
创建完成后可通过以下命令查看是否创建成功:
cat /etc/passwd | grep admin
若返回类似如下的输出则说明创建成功:
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
admin:x:1000:1000::/home/admin:/bin/bash
然后就可以通过以下命令切换用户了:
su admin
更改主机名¶
首次登陆一台云服务器时,其主机名通常是一串代号,或许这并不美观,但是否更改主机名则可完全根据个人喜好决定,并不会对实际开发有什么实质影响。
永久更改主机名可通过以下命令实现:
sudo hostnamectl set-hostname webserver && echo "127.0.0.1 webserver" | sudo tee -a /etc/hosts
执行后需要重启服务器使更改生效
重启完成后,若修改成功,会体现在命令提示符的主机名中,同时可通过以下命令查看更改是否写入配置文件:
cat /etc/hosts | grep webserver
cat /etc/hostname | grep webserver
安全组/防火墙配置¶
如需在服务器上部署服务并对外开放,或者需要在特定端口上部署测试服务并使外界能够进行测试访问,则需要通过修改安全组/防火墙配置来控制访问权限。如果你在服务器上部署了一个web服务,结果通过外网设备进行测试访问时却发现访问不了,一个可能的原因就是因为防火墙的拦截。通常情况下,服务器的443(https)、80(http)、22(ssh)三个端口是默认处于入站许可的状态的。
修改安全组通常可以通过在远程服务器上直接修改或在官方提供的服务器实例详情上的安全组配置界面进行修改两种方式。个人比较推荐后者,操作方便且界面清晰明了,不易出错。详情这里不作展开。