openssl
:TLS/SSl(libssl,libcryto,openssl),TSL PKI
OpenSSH:
telnet,TCP/23,远程登录
认证明文(密码认证)
数据传输明文
ssh:Secure Shell ,TCP/22
C/S架构 套接字监听
SSH --> SSH
openssh(开源) 即是协议,又是软件
ssh V1(中间人攻击),V2
客户端:
LINUX:ssh
Windows:putty,SecureCRT(商业版),SSHsecureShellClient,Xmanger
服务器端:(linux,unix)
sshd
openssh(ssh,sshd)
ssh--->telnet
ssh:主机密钥
client-------->server
yes:接受服务器主机发来的公钥
RSA,DSA
客户端生成临时对称密钥(会话)随机生成
对称密钥使用服务器的公钥加密后传给服务器,只有服务器的私钥可以解密。
账号和密码用对称密钥加密后传给服务器进行认证。
认证通过,建立一个永久的会话通道。
基于口令的认证
基于密钥的认证
客户端生成一对密钥,公钥传到服务器的对应用户的家目录下,身份认证是客户端利用自己的私钥加密一段数据,服务器用客户的公钥解密。可解,则认证通过。
不允许root直接登录,而是用普通用户,在su切换。
安全措施:
- 限定某些台有限主机能够登录
- 在前端vpn,允许vpn的IP地址登录,先登录到vpn在ssh到主机。
- 改变端口
- 经常换密码
[root@li ~]# rpm -qa |grep openssh
openssh-clients-5.3p1-84.1.el6.x86_64
openssh-5.3p1-84.1.el6.x86_64 通用组件及库
openssh-askpass-5.3p1-84.1.el6.x86_64
openssh-server-5.3p1-84.1.el6.x86_64
rpm -qi openssh-5.3p1-84.1.el6.x86_64
netstat -tln
netstat -rn 路由表
UDP 无状态
tcp listen
netstat -p process|program
servcie sshd status
lsof -i:22
lsof(list open files)是一个列出当前系统打开文件的工具,可以用来恢复删除的数据。
配置文件
ssh (ssh_conf)
sshd (sshd_conf)
/etc/ssh/
moduli:和密钥交换,认证有关的
不同sshv1 dsa ,sshv2 rsa 没有
注意:权限 私钥600 公钥644
├─sshd─┬─3*[sshd───bash]
│ └─sshd───bash───pstree
sshd主进程,会创建多个子进程
vim /etc/ssh/sshd_conf
配置项格式: var values
修改端口 port 2223
AddressFamily any :IPV4,IPV6哪个地址
ListenAddress 0.0.0.0 都监听 在哪一个地址上监听
KeyRegenerationInterval 1h 密钥重新生成密钥的时间
ServerKeyBits 1024 密钥长度
SyslogFacility AUTHPRIV
LogLevel INFO
LoginGraceTime 2m 登录的宽限期,建立会话后,要输账号和密码。
PermitRootLogin yes 是否允许root直接登录。
StrictModes yes 是否使用严格限定模式
MaxAuthTries 6 最大可以尝试输错
MaxSessions 10
#RSAAuthentication yes 是否支持RSA认证
#PubkeyAuthentication yes 基于密钥认证
#AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody
#RhostsRSAAuthentication no 主机认证
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
#Banner none 标语
#PrintMotd yes 是否打印/etc/motd里的内容
#PrintLastLog yes 打印上次登录 ,不启用信息泄露。
涉及安全,信息越少越好。
Subsystem sftp /usr/libexec/openssh/sftp-server
和ftps不同。
man sshd_config
kill -L
客户端:ssh
ssh - OpenSSH SSH client (remote login program)
ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-e escape_char]
[-F configfile] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port] [-w
local_tun[:remote_tun]] [user@]hostname [command]
如果不指定用户,则以当前的用户切换过去。
ssh -l root host
ssh root@host
~/.ssh/known_host 主机密钥
不登录主机,仅在主机上执行命令,并返回执行结果。
ssh -l username Remotehost ['command'] 可以不用引号
ssh -X
-X Enables X11 forwarding.
-Y Enables trusted X11 forwarding.
执行图形窗口
-p 端口
基于密钥的认证:
一台主机为客户端(基于某个用户实现 ),
1. 生成一对密钥
ssh-keygen
ssh-keygen -t rsa
密钥保存在~/.ssh/id_rsa
可以指定密钥的名称
2. 将公钥传输至服务器端某用户的家目录下的.ssh/authorized_keys文件中
使用文件传输工具传输(ssh-copy-id,scp)
ssh-copy-id -i /path/pubkeyname username@host
ssh-copy-id .ssh/id_rsa.pub [email protected]
scp .ssh/id_rsa.pub [email protected]:/tmp
ssh [email protected] cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
3. 测试登录
scp
基于ssh的远程复制命令,可以实现在主机之间传输数据。
scp [option] SRC DEST
remote_host:
username@host:file
SYNOPSIS
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 ... [[user@]host2:]file2
目录 -r
-P
-a
ssh-keygen
.ssh的权限是700
-f filename
Specifies the filename of the key file
ssh-keygen -t rsa -f .ssh /id_rsa
[-N new_passphrase]
-t rsa|dsa
-f /path/
-N 'passwd' 在脚本中使用
ssh-copy-id
ssh-copy-id - install your public key in a remote machine’s authorized_keys
ssh-copy-id [-i [identity_file]] [user@]machine
sftp
总结
- 密码要经常换
- 使用非默认端口;
- 限制登录客户地址
- 禁止管理员直接登录
- 仅允许有限的用户登录
- 使用基于密钥的认证
- 禁止使用版本1