SSH远程管理
1. 使用方法
1.1 密码连接
可以直接在tenmial中输入ssh <username>@<ip>进行连接,输入密码即可。但是通过vscode 结合插件会更方便。
- 查看对象IP地址
ifconfig
- 查看对象IP地址
- vscode 安装插件
Remote - SSH
- vscode 安装插件
- 点击左下角的
><,选择 `Remote-SSH: Connect
- 点击左下角的
- 输入
ssh <username>@<ip>,输入密码即可。eg: ssh orangepi@192.168.137.47
- 输入
vscode 可以对该指令保存(在~/.ssh/config中),后续只要输入password即可连接。而不需要ip地址。
1.2 密匙连接
以上是采用密码连接的ssh方式,这样的方式不够安全,推荐采用密匙连接的方式。使用密匙连接的方式也很简单:
首先,通过
ssh-keygen -t ed25519 -C "rk3588 key"来生成密匙对(有rsa/ed25519等多种算法生成),会保存在~/.ssh目录下(补全可知在windows下是C:\Users\zhangxing\.ssh)。可以自行设置密匙的名称和passphrase。其次,将公钥
id_ed25519.pub的内容复制到远程主机的~/.ssh/authorized_keys文件中。可以使用指令ssh-copy-id <username>@<ip>来复制。如果没有ssh-copy-id指令,可以使用cat /root/.ssh/id_*.pub | ssh user@ip 'cat >> .ssh/authorized_keys'实现;或直接手动复制实现。参考windows 下解决无 ssh-copy-id 问题最后,通过
ssh -i ~/.ssh/id_ed25519 <username>@<ip>来连接远程主机。例如:ssh -i ~/.ssh/id_rk3588 orangepi@192.168.137.81.也可以将该指令保存在~/.ssh/config中,这样vscode就可以直接左下角进行连接。
为了保证安全,我们可以在服务器端的/etc/ssh/sshd_config文件中设置PasswordAuthentication no与PubkeyAuthentication yes,这样就可以禁止密码登录,只能通过密匙登录。就能更好地保证安全。
如果想要在windows下使用密匙连接,可以使用ssh-agent来管理密匙。
首先,通过eval "${ssh-agent}"来启动代理,
然后, 通过ssh-add ~/.ssh/id_ed25519来添加密匙,此时需要输入一次passphrase,这样后续就不在需要输入passphrase.
ssh-agent其实就是将passphrase写入内存并实时等待自动添加passphrase,是实时运行的,所以从安全和性能角度来看,需要及时用指令 ssh-agent -k将其关闭。
注:其实与Github的连接同样如此,只需要将公钥添加到Github的SSH and GPG keys中,我们就可以通过密匙连接Github。而Github不允许通过密码连接。所以需要本地会生成密匙并复制公匙到Github中。而与Github连接甚至通过ssh来clone都是需要提供密匙和passphrase的。我们可以将与Github相关的密匙路径写入~/.ssh/config中,例如:IdentityFile ~/.ssh/id_github,这样每次需要提供密匙时会自动先从~/.ssh/config中找到,这样就只要在终端写ssh -T git@github.com,而不需要ssh -i ~/.ssh/id_github -T git@github.com。我们也可以通过ssh-agent来代理密匙,从而节省输入passphrase的过程。
视频参考:OpenSSH核心操作 | GitHub SSH连接
2. 文件传输
如果想进行本地与远程文件的传输,可以使用scp指令。
eg: scp orangepi@192.168.137.47:/home/orangepi/Downloads/test.txt C:\user\zhangxing\Desktop
这是远程->本地的传输,如果想本地->远程,只需要将路径调换即可。