SSH 相关操作
启用 SSH 并使用 root 账户登录
虽说通过应用的形式在 Windows 10 上体验 Linux 是一个不赖的选择,但很多时候使用 Windows 内置的 CMD 或者 PowerShell 来操作 Linux 依旧有着很多不习惯。
而最为关键的是当需要对文件进行操作时,使用交互命令远不如使用 SFTP 来的更为「简单粗暴」。因此只要通过配置 SSH 远程登录,就可以像管理远程服务器那样来操作这个 Linux 系统了。
首先,因为 Ubuntu 系统限制,所以我们需要可以为 root 用户设置新密码,这里输入:
1 | sudo passwd root |
配置好之后,未来使用 SSH 客户端或者 SFTP 客户端登录系统时,我们就可以直接使用 root 权限进行登录。
使用 cp
命令将 SSH 相关配置文件进行备份:
1 | sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak |
之后使用 vim 编辑器编辑 sshd_config
文件:
1 | sudo vim /etc/ssh/sshd_config |
编辑并调整以下设置项:
1 | Port 22 |
然后输入命令:
1 | systemctl restart sshd |
启动 SSH
如果要从其他电脑连接,记得防火墙放行端口 22
错误处理
如果出现以下错误,可以通过 ssh-keygen
自动产生缺少的 key
1 | * Stopping OpenBSD Secure Shell server sshd [ OK ] |
修复方法
执行
1 | sudo ssh-keygen -A |
重启 ssh 服务
1 | root@Monster:~$ sudo service ssh --full-restart |
设置免密登录
通常来说,启动 root 登录,并使用密码进行连接不仅不安全,而且连接需要输入密码,这里描述如何使用更安全的免密登录。
STEP 1:在本地生成公钥和私钥对
1 | # RSA 算法,长度 4096(默认为 2048) |
一路回车,都设置为默认值,即在本地生成了公钥和私钥,设置 passphrase(更安全,但是每次连接前需要输入密码),存储在当前目录下(如果不使用 -f
参数,则会默认生成在~/.ssh/ 目录下)
1 | > .ssh tree -a |
其中:
id_rsa
是默认生成的私钥id_rsa.pub
是默认生成的公钥authorized_keys
文件存放其他主机的公钥,其他主机即可 ssh 登录该机know_hosts
记录主机登陆过的其他主机的公钥信息。
STEP 2:把公钥加入到服务器的 authorized_keys
文件中
使用 ssh-copy-id
命令,ssh-copy-id
命令可以把本地主机的公钥复制到远程主机的 authorized_keys
文件上,ssh-copy-id
命令也会给远程主机的用户主目录中 ~/.ssh/authorized_keys
设置合适的权限。
把本地的 ssh
公钥文件安装到远程主机对应的账户下:
1 | ssh-copy-id user@server |
可选步骤:配置本地 config 文件
在本地机器的目录 ~/.ssh
下找到 config
文件,按如下进行配置:
1 | Host xxx # xxx:一个服务器昵称 |
以后只要 ssh xxx
便可登陆服务器啦~
SCP 命令
scp 命令可用于 linux/macOS 之间复制文件和目录。
scp 是 secure copy 的缩写,scp 是 linux/macOS 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的
从本地复制到远程
1 | # 指定了用户名,命令执行后需要再输入密码,仅指定了远程的目录,文件名字不变 |
从远程复制到本地
1 | # 只要将从本地复制到远程的命令的后2个参数调换顺序即可,如下 |