点击上方“后端技术精选”,选择“置顶公众号”
技术文章第一时间送达!
>>广而告之:技术交流、讨论、学习群
1.前言
在Mac下登陆远程服务器并没有Windows那么方便的使用XShell,相比较而言,在Mac下更多的是依赖终端输入SSH命令登陆远程服务器。
使用SSH命令行的好处就是可以近距离接触底层,用的越多,用的越溜,对SSH的原理就越了解。相反,使用现成的SSH工具(PuTTY、XShell),我们其实并不会有涉及使用ssh命令的机会,对大多数人而言,怕是只知道最基本的ssh root@ip
。
本文将带大家了解ssh的原理与使用技巧,帮助更多终端爱好者更方便更随心所欲的使用终端。
2.SSH是什么
SSH服务其实是一个守护进程(demon),系统后台会监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。SSH服务端由2部分组成:openssh(提供ssh服务)、openssl(提供加密的程序)。
3.对称加密和非对称加密
在学习SSH的工作机制之前,我们需要了解对称加密和非对称加密的原理。
对称加密
所谓对称加密,是采用对称密码编码技术的加密措施,它的特点是文件加密和解密都是使用相同的密钥。
这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。
非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
4.SSH如何工作
了解了对称加密和非对称加密是什么之后,再来了解SSH如何使用非对称加密技术,大致流程如下:
在服务器启动的时候会产生一个密钥(也就是768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits公钥)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,服务端利用自己的私钥解密,读取出客户端的本地私钥,建立连接通过key-pair数据传输,在此之后,服务端与客户端就愉快的使用客户端私钥进行沟通。
5.SSH命令详解
SSH命令最简单的用法只需要指定用户名和主机名参数即可,主机名可以是 IP 地址或者域名。
ssh root@192.168.0.1
指定端口号
SSH 默认连接到目标主机的 22 端口上,我们可以使用 -p 选项指定端口号。
ssh -p 22 root@192.168.0.1
追加命令
使用 SSH 在远程主机执行一条命令并显示到本地,然后继续本地工作,只需要直接连接并在后面加上要执行的命令。
ssh -p 22 root@192.168.0.1 ls -l
图形界面
在远程主机运行一个图形界面的程序,只需使用SSH的-X选项,然后主机就会开启 X11转发功能。
ssh -X 22 root@192.168.0.1
绑定源地址
如果你的客户端有多于两个以上的 IP 地址,你就不可能分得清楚在使用哪一个 IP 连接到 SSH 服务器。为了解决这种情况,我们可以使用 -b 选项来指定一个IP 地址。这个 IP 将会被使用做建立连接的源地址。
ssh -b 192.168.0.200 root@192.168.0.103
对所有数据请求压缩
使用 -C 选项,所有通过 SSH 发送或接收的数据将会被压缩,并且仍然是加密的。
ssh -C root@192.168.0.103
打开调试模式
因为某些原因,我们想要追踪调试我们建立的 SSH 连接情况。SSH 提供的 -v 选项参数正是为此而设的。其可以看到在哪个环节出了问题。
ssh -v root@192.168.0.103
6.SSH免密登陆
通过SSH命令登陆远程服务器需要手动的每次输入密码,解决这个问题其实非常简单,通过 ssh-keygen 生成本地公钥和私钥,将公钥Copy到远程服务器就可以。
1.构建 SSH 密钥对
使用 ssh-keygen -t +算法名,现在大多数都使用 RSA 或者 DSA 算法。
如果你在安装Git时已经做过此步骤,那么忽略这一步即可。
ssh-keygen -t rsa
2.拷贝本地公钥给远程服务器
ssh-copy-id root@192.168.25.110
你可以通过参数 -i 指定公钥文件
ssh-copy-id -i id_dsa.pub omd@192.168.25.110
3.查看是否已经添加了对应主机的密钥
使用 -F 选项
ssh-keygen -F 192.168.0.1
4.删除主机密钥
使用-R选项,也可以在 ~/.ssh/known_hosts 文件中手动删除
ssh-keygen -R 192.168.0.1
7.如何配置 SSH
SSH 的配置文件在 /etc/ssh/sshd_config 中,你可以看到端口号,空闲超时时间等配置项。
cat /etc/ssh/sshd_config
/etc/ssh/sshd_config 配置文件详细说明
#
8.sftp是什么
SFTP是Secure FileTransferProtocol的缩写,安全文件传送协议。
SFTP和FTP是两种协议,它们是不同的,sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身没有单独的守护进程,更不需要ftp服务器启动。
SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
9.sftp登陆
使用sftp登陆远程服务器,可以
sftp root@192.168.0.1
也可以指定端口号
sftp -oPort=22 root@192.168.0.1
10.使用sftp进行文件上传下载
下载
语法
get [-afPpRr] remote [local]
下载远程文件到本地目录
get /tmp/test.c ~/
下载远程文件夹到本地目录
get -r /tmp/test.c ~/
上传
语法
put [-afPpRr] local [remote]
上传本地文件到远程文件夹
put ~/test.c /tmp/
上传本地文件夹到远程目录(会上传本地文件夹下的所有文件)
put ~/test /tmp/
11.更多sftp命令
输入 help 命令可以查看sftp支持的命令操作:
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-afPpRr] remote [local] Download file
reget [-fPpRr] remote [local] Resume download file
reput [-fPpRr] [local] remote Resume upload file
help Display this help text
lcd path Change local directory to 'path'
lls [ls-options [path]] Display local directory listing
lmkdir path Create local directory
ln [-s] oldpath newpath Link remote file (-s for symlink)
lpwd Print local working directory
ls [-1afhlnrSt] [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
progress Toggle display of progress meter
put [-afPpRr] local [remote] Upload file
pwd Display remote working directory
quit Quit sftp
rename oldpath newpath Rename remote file
rm path Delete remote file
rmdir path Remove remote directory
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
执行本地命令
如果我们想在进入sftp会话环境下执行本地命令怎么办?只需要在本地命令之前加叹号!即可,示例如下:
!ls
退出会话
无论是在 ssh 还是 sftp,都可以使用 exit
退出当前会话,sftp 还可以使用 quit
命令退出。
12.结语
相信本文足以可以让你解决使用终端过程中碰到的绝大多数问题了。
我是薛勤,咱们下期见!关注我,带你领略更多编程技能!
参考文章:https://www.cnblogs.com/ftl1012/p/ssh.html
推荐阅读(点击即可跳转阅读)
1. SpringBoot内容聚合
2. 面试题内容聚合
3. 设计模式内容聚合
4. 排序算法内容聚合
5. 多线程内容聚合
6. 7个IntelliJ IDEA必备插件,提高编码效率
7. IntelliJ IDEA 从入门到上瘾教程,2019图文版!
看到这里了,就关注一个呗