ssh
SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。
此外,本文只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。
参考:SSH原理与运用(一):远程登录
数字签名-阮一峰
使用
ssh user@host
当远程用户名与本地用户名一致时,登录名可以省略,即
ssh host
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
ssh -p 2222 user@host
公钥登陆
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
(之前自己读这段话,不太理解,后来看了阮一峰的这篇博客,数字签名-阮一峰,然后就理解这个过程了)
总之,公钥登陆这种办法不需要用户在每次登录的时候输入密码。下面是这种方法实现的步骤
一、用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
ssh-keygen
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
二、这时再输入下面的命令,将公钥传送到远程主机host上面:
ssh-copy-id user@host
公钥上传成功后,之后就不需要输入密码了
注意,还可以通过这种方式上传公钥:
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,因此,只要把它追加在authorized_keys文件的末尾就行了。
如果用户主目录中的.ssh目录不存在,就创建一个;
mkdir -p .ssh
假设,已经上传id_rsa.pub文件到了这个目录下,然后运行:
cat >> .ssh/authorized_keys < id_rsa.pub
还可以在本地直接使用下面的代码,一步上传。
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
如果添加了公钥之后,依然需要输入密码登录,可能需要更改文件的读写权限,例如:
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
快速登陆(配置config文件)
在客户端配置一个config文件,从而能够实现根据自定义的名称快速登陆远程服务器。
如果没有,就自己创建一个配置文件(~/.ssh/config),这个目录下指的是配置只针对用户自身。
(我配置好的就不贴出来了。)
Host your_name
HostName 192.169.1.2
Port 22
User your_username
IdentityFile ~/.ssh/id_rsa
更多参数参考:ssh_config
配置好后,保存起来,之后登陆就可以直接ssh your_name
登陆了
远程文件操作:
scp
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
1、从本地复制到远程
复制一个本地文件到远程的文件夹下
scp local_file remote_username@remote_ip:remote_folder
当复制一个目录时,使用参数-r,即可完成操作:
scp -r local_folder remote_username@remote_ip:remote_folder
2、从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可
scp -r remote_username@remote_ip:remote_folder local_folder
注意,1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的
附
OpenSSH被广泛使用,但是因为免费开源,基本很少公司资助过OpenSSH资助,于是官网页面就很简陋。。更多参考请访问OpenSSH