首页 > 代码库 > ssh (笔记)
ssh (笔记)
注:以下是Unix-like的相关操作 Windows 并没有 ssh 的客户端程序,因此所有的程序windows都得要下载其他第三方软件才行
主要有 pietty, psftp 及 filezilla 等
putty/pscp/psftp 他们分别对应了 ssh/scp/sftp Windows的相关软件操作 不做介绍
SSH 协议,在预设的状态中,本身就提供两个服务器功能:
1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;
2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。
非对称密钥系统
透过两把不一样的公钥与私钥来进行加密与解密的过程
公钥 (public key):提供给远程主机进行数据加密的行为,也就是说,大家都能取得你的公钥来将数据加密的意思;
私钥 (private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥是不能够外流的!只能保护在自己的主机上。
目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等机制喔!
ssh联机过程
1. 服务器建立公钥文件:
每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件, sshd 会主动去计算出这些需要的公钥文件,和主机自己需要的私钥文件
重装系统也会执行以上操作
2. 客户端主动联机要求:
若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, pietty 等客户端程序;
3. 服务器传送公钥给客户端:
接收到客户端的联机要求后,服务器便将第一个步骤取得的公钥传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);
4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:
client第一次联机会把server的公钥文件记录到用户家目录内的 ~/.ssh/known_hosts 。
若已经记录过了,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据;
密钥是随机运算产生于每次联机当中
5. 回传客户端的公钥数据到服务器端:
用户将自己的公钥传送给服务器。
此时服务器:『具有服务器的私钥与客户端的公钥』,
客户端则是: 『具有服务器的公钥以及客户端自己的私钥』
在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统。
6. 开始双向加解密:
(1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密;
(2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。
启动ssh服务
Unix-like 系统当中,默认就已经含有 SSH 的所有需要的软件了!其中包含了
可以产生密码等协议的LinuxOpenSSL软件和OpenSSH软件
服务端直接启动就是以 SSH daemon ,简称为 sshd 来启动
[root@www ~]# /etc/init.d/sshd restart
[root@www ~]# netstat -tlnp | grep ssh
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::22 :::* LISTEN 1539/sshd
客户端连接服务器 使用ssh指令
[root@www ~]# ssh [-f] [-o 参数项目] [-p 非正规埠口] [账号@]IP [指令]
选项与参数:
-f :需要配合后面的 [指令] ,不登入远程主机直接发送一个指令过去而已;
-o 参数项目:主要的参数项目有:
ConnectTimeout=秒数 :联机等待的秒数,减少等待的时间
StrictHostKeyChecking=[yes|no|ask]:预设是 ask,若要让 public key
主动加入 known_hosts ,则可以设定为 no 即可。
-p :如果你的 sshd 服务启动在非正规的埠口 (22),需使用此项目;
[指令] :不登入远程主机,直接发送指令过去。但与 -f 意义不太相同。
ssh 192.168.129.158 1
The authenticity of host ‘192.168.129.158 (192.168.129.158)‘ can‘t be established.
RSA key fingerprint is b5:49:85:1e:6d:0d:81:2d:2d:ef:30:12:cd:36:0d:fe. 这一行后边的就是远程服务器的公钥指纹码
Are you sure you want to continue connecting (yes/no)? yes 输入 yes 将指纹码写入本地公钥记录文件 (~/.ssh/known_hosts)
Warning: Permanently added ‘192.168.129.158‘ (RSA) to the list of known hosts. 加入之后未来比对该服务器的正确性之用
登陆服务器执行指令之后立刻离开 常用在需要关闭远程服务器时使用
[Jade@localhost-3:~] ssh -f root@192.168.129.158 find / &> ~/find1.log
root@192.168.129.158‘s password:
联机时自动在本地添加公钥 写程序脚本需要连接多台主机时比较有用
[Jade@localhost-3:~]ssh -o StrictHostKeyChecking=no root@192.168.129.158
Warning: Permanently added ‘192.168.129.158‘ (RSA) to the list of known hosts.
root@192.168.129.158‘s password:
如果服务器的ssh公钥变化(比如删除了服务器/etc/ssh/ssh_host_*文件 或重装系统后)那么客户端ssh联机时就会报错
因为本地存储的公钥(~/.ssh/know_host中对应ip后的数据)和服务器的公钥不同造成 此时只要删除本地know_host对应ip的行 重新连接写入即可
[Jade@localhost-3:~/shell] ssh root@192.168.129.158
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
46:69:89:d8:b7:e1:28:49:ac:4f:92:fd:8e:2d:a2:05.
Please contact your system administrator.
Add correct host key in /Users/Jade/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/Jade/.ssh/known_hosts:42
RSA host key for 192.168.129.158 has changed and you have requested strict checking.
Host key verification failed.
sftp:使用ssh的通道(part22)模拟FTP的文件上传与下载
[Jade@localhost-3:~] sftp root@192.168.129.158
root@192.168.129.158‘s password:
Connected to 192.168.129.158.
sftp> 这里即可输入ftp相关的指令
针对远方服务器主机 (Server) 之行为 | |
变换目录到 /etc/test 或其他目录 | cd /etc/test cd PATH |
列出目前所在目录下的文件名 | ls dir |
建立目录 | mkdir directory |
删除目录 | rmdir directory |
显示目前所在的目录 | pwd |
更改档案或目录群组 | chgrp groupname PATH |
更改档案或目录拥有者 | chown username PATH |
更改档案或目录的权限 | chmod 644 PATH 其中,644 与权限有关!回去看基础篇! |
建立连结档 | ln oldname newname |
删除档案或目录 | rm PATH |
更改档案或目录名称 | rename oldname newname |
离开远程主机 | exit (or) bye (or) quit |
针对本机 (Client) 之行为(都加上 l, L 的小写 ) | |
变换目录到本机的 PATH 当中 | lcd PATH |
列出目前本机所在目录下的文件名 | lls |
在本机建立目录 | lmkdir |
显示目前所在的本机目录 | lpwd |
针对资料上传/下载的行为 | |
将档案由本机上传到远程主机 | put [本机目录或档案] [远程] put [本机目录或档案] 如果是这种格式,则档案会放置到目前远程主机的目录下! |
将档案由远程主机下载回来 | get [远程主机目录或档案] [本机] get [远程主机目录或档案] 若是这种格式,则档案会放置在目前本机所在的目录当中!可以使用通配符,例如: get * get *.rpm 亦是可以的格式! |
注意上传文件夹的话需要OpenSSH 5.4即以上
scp:异地直接复制
[root@www ~]# scp [-pr] [-l 速率] file [账号@]主机:目录名 <==上传
[root@www ~]# scp [-pr] [-l 速率] [账号@]主机:file 目录名 <==下载
选项与参数:
-p :保留原本档案的权限数据;
-r :复制来源为目录时,可以复制整个目录 (含子目录)
-l :可以限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 代表传输速限 100Kbytes/s
将本地的shell目录 保留原本文件权限数据 复制到远程主机~/目录下
[Jade@localhost-3:~] scp -pr shell root@192.168.129.158:~/
root@192.168.129.158‘s password:
将远程文件复制到本地
[Jade@localhost-3:~] scp root@192.168.129.158:~/top.txt ./
root@192.168.129.158‘s password:
top.txt
sshd服务器详细设定
[root@bird ~]# vim /etc/ssh/sshd_config
只要是预设有出现且被批注的(#)设定值为默认值
通常只是设置不允许root的ssh登录 ssh的版本设为V2 其余默认已经很好
制作不用密码立即登入的ssh用户
1. 客户端建立两把钥匙:利用的指令为 ssh-keygen 这个命令;
2. 客户端放置好私钥文件:将 Private Key 放在 Client 上面的家目录,亦即 $HOME/.ssh/ , 并且得要注意权限喔!
3. 将公钥放置服务器端的正确目录与文件名去:
最后,将那把 Public Key 放在任何一个你想要用来登入的服务器端的某 User 的家目录内之 .ssh/ 里面的认证文件即可完成整个程序。
为jade用户(新创建的)设置ssh的无需密码登录服务器
client操作
jade用户创建密钥文件
bash-3.2$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/jade/.ssh/id_rsa):
Created directory ‘/Users/jade/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/jade/.ssh/id_rsa.
Your public key has been saved in /Users/jade/.ssh/id_rsa.pub.
The key fingerprint is:
94:6b:ad:7b:b5:77:0d:b1:fc:f3:34:77:18:23:53:cb jade@localhost-3.local
注意目录和两个密钥文件的权限设定
bash-3.2$ ls -ld .ssh/; ls -l .ssh/
drwx------ 4 jade staff 136 11 23 14:32 .ssh/
total 16
-rw------- 1 jade staff 1675 11 23 14:32 id_rsa
-rw-r--r-- 1 jade staff 404 11 23 14:32 id_rsa.pub
将公钥上传到服务器的用户家目录
bash-3.2$ scp ~/.ssh/id_rsa.pub jade@192.168.129.158:~
server操作
/home/wanjiadi/下如果没有.ssh目录 手动创建 注意权限
[jade@bird ~]# mkdir .ssh;chmod 700 .ssh
将client端上传的公钥使用cat 新增到authorized_keys中
[jade@bird ~]# cat id_rsa.pub >> .ssh/authorized_keys
[jade@bird ~]# chmod 644 .ssh/authorized_keys
[jade@bird ~]# ls -l .ssh
-rw-r--r--. 1 jade jade 404 11月 23 18:34 authorized_keys
当你还想要登入其他的主机时,只要将你的 public key copy 到其他主机上面去,并且新增到某账号的 ~/.ssh/authorized_keys 这个文件中即可
建议安全设定
其实sshd的数据是加密的 所以在Internet上面传递时比较安全 至于sshd服务本身并不是那么安全 安全设定建议 以下三条
服务器软件本身的设定强化:/etc/ssh/sshd_config
# 修改 sshd_config 并且重新启动 sshd !
[root@www ~]# vim /etc/ssh/sshd_config
PermitRootLogin no <==约在第 39 行,请拿掉批注且修改成这样
DenyGroups nossh <==底下这两行可以加在档案的最后面
DenyUsers testssh
TCP wrapper 的使用:/etc/hosts.allow, /etc/hosts.deny
[root@www ~]# vim /etc/hosts.allow
sshd: 127.0.0.1 192.168.1.0/255.255.255.0 192.168.100.0/255.255.255.0
[root@www ~]# vim /etc/hosts.deny
sshd : ALL
iptables 的使用: iptables.rule, iptables.allow
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
ssh进阶应用
非22端口启动ssh服务
很多 cracker 会使用扫描程序乱扫整个 Internet 的端口漏洞,这个 port 22 就是一个很常被扫描的端口
[root@www ~]# vim /etc/ssh/sshd_config Port 4444 Port 4445 <==注意喔!要有两个 Port 的设定才行! [root@www ~]# /etc/init.d/sshd restart
centos6.7直接就可以使用了 老版本可能会出现SELinux的错误 必须自行定一个SELinux的规则放行模块才行
# 1. 于 /var/log/audit/audit.log 找出与 ssh 有关的 AVC 信息,并转为本地模块 |
联机方式指定端口
[Jade@localhost-3:~] ssh root@192.168.129.158 -p4444
查看端口使用情况
[root@bird ~]# netstat -tnp | grep 4444
tcp 0 0 192.168.129.158:4444 192.168.129.174:49988 ESTABLISHED 15879/sshd
rsync进行同步镜像备份
见rsync篇笔记
ssh (笔记)