Yan
Yan Just a simple man.

ssh

ssh

ssh是linux远程操作和管理服务的重要工具

安装ssh

使用各发行版的包安装工作直接安装即可,这里以ubuntu为例

1
$ sudo apt install ssh

ssh常用命令

ssh连接远程host

使用ssh登录服务器或者局域网下的其他主机是很常用的一种方式,特别在嵌入式开发里.

1
$ ssh host-usename@host-ipaddress

比如:

1
$ ssh root@192.168.1.250

退出远程连接

使用exit命令就能退出远程连接.

1
$ exit

ssh拷贝文件

scp是最常用的用来和远程进行数据交互的工具,-r参数可直接交互整个文件夹

1
2
3
$ scp [[user@]host1:]file1 ... [[user@]host2:]file2
$ scp -r [[user@]host1:]file1 ... [[user@]host2:]file2

host1是拷贝位置,host2是目标位置.则拷贝文件到远程主机,host1是你的主机,host2是远程主机.从远程主机拷贝文件到本地反过来即可.例如:

1
2
$ scp ~/ssh.txt root@10.72.1.16:~  #从本地copy到远程主机
$ scp root@10.72.1.16:~/ssh.txt ~  #从远程主机copy到本地

ssh key

生成ssh key

linux下可直接在终端通过ssh的命令生成ssh key

1
$ ssh-keygen -t rsa -C "you@email.com"

都选择默认选项就可以生成相应的key

查看生成的key

1
$ cat ~/.ssh/id_rsa.pub

添加到ssh-agent

ssh-agent 就是key管理器,主要用于管理公钥验证使用的私钥。

1
2
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa

Git使用ssh

以github为例,gitlab和gitee是同样的。

添加key到github

打开github页面,打开个人设置

ssh-git-1

在左边的栏目找到SSH Key

ssh-git-2

然后在主界面的上面就有一个新增ssh key的按键

ssh-git-3

将生成的SSH Key添加到key里,titile可以随意设置

ssh-git-4

Add SSH Key以后就添加完成了

测试Git的ssh配置是否成功

1
2
$ ssh -T git@github.com
Hi yan-wyb! You've successfully authenticated, but GitHub does not provide shell access.

看到这个说名配置已经成功了。 之后使用ssh来clone和push代码,就不再需要输入密码了。

1
$ git@github.com:khadas/khadas_docs.git

注意: 以git@开头的才是使用ssh方式clone的,以http://开头的就是使用https://方式

ssh免密登录

客户端: 指使用id_rsa进行ssh登录的端,常常为你正在操作远程登录的PC端,或者部署工具端,如travis

服务端: 值接受id_rsa.pub并保存进authorized_keys的端,常常是服务器如阿里云或者github.

注意: 免密登录对权限极其敏感

客户端操作

首先生成一对秘钥,生成方法可以参考上面的ssh key,为密钥对设置权限

1
2
$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa.pub

将公钥添加到服务端的授权文件里

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@xx.x.xx.x  /*1.公钥可以使用自定义的;2.user是服务端用户名;3.xx.x.xx.x是服务器地址,也可以使用域名*/

输入远程登录的密码,就添加成功了

服务端操作

服务端只需要设置权限就可以

1
$ chmod 600 ~/.ssh/authorized_keys

测试

客户端使用ssh登录

1
$ ssh user@xx.x.xx.x

直接登录即为设置成功,需要输入密码应检查权限问题.主目录权限必须小于等于755

ssh端口映射

通过SSH可以将远程端口映射回本地,方便在搭建网站或者Blog时,本地访问,查看效果。

示例,将远程的8888端口,映射到本地的8888端口。

1
$ ssh -L8888:localhost:8888 username@192.168.xx.xxx