不定期补充、修正、更新,欢迎大家讨论和指正
目录
概览
SSH(Secure Shell)是一种能够以安全方式提供远程登录的常用应用层协议。
在此之前,一般使用FTP或Telnet来远程登入,但是因为他们以明文的方式在网络中传输账户密码和数据信息很不安全。
Linux系统默认提供了SSH服务
SSH提供两种验证方式:基于口令和基于密钥的安全验证
- SSH原理
文档分析
目录
/etc/ssh/
├── moduli
├── ssh_config //客户端配置
├── sshd_config //服务端配置
├── ssh_host_dsa_key //dsa私钥
├── ssh_host_dsa_key.pub //dsa公钥 后面一样的
├── ssh_host_ecdsa_key
├── ssh_host_ecdsa_key.pub
├── ssh_host_ed25519_key
├── ssh_host_ed25519_key.pub
├── ssh_host_rsa_key
└── ssh_host_rsa_key.pub
参数
ssh
ssh-agent
sshd
ssh-keygen
ssh-add
ssh-copy-id
sshd-keygen
ssh-keyscan
ssh_config
# Host *
# ForwardAgent no
# ForwardX11 no
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
# Protocol 2
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h
# Uncomment this if you want to use .local domain
# Host *.local
# CheckHostIP no
Host *
GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
ForwardX11Trusted yes
# Send locale-related environment variables
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS
sshd_config
#Port 22 //监听端口
#AddressFamily any //选择IPV4和IPV6协议族 any表示两者均有
#ListenAddress 0.0.0.0 //监控地址 默认为本机所有地址
#ListenAddress ::
HostKey /etc/ssh/ssh_host_rsa_key //rsa私钥认证【默认】HostKeys for protocol version 2支持以下四种密钥认证 centos6只支持rsa和dsa
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#RekeyLimit default none
#SyslogFacility AUTH //当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
#LogLevel INFO //日志等级
#LoginGraceTime 2m //登录宽限时间 两分钟没有输入密码则自动断开连接
#PermitRootLogin yes //允许root用户登入 为了安全一般设置为no
#StrictModes yes //是否让sshd去检查用主目录或相关文件的权限数据
#MaxAuthTries 6 //最多认证尝试次数 超过则需要等待一段时间才能再次尝试
#MaxSessions 10 //最大会话数
#PubkeyAuthentication yes //是否允许基于公钥的认证
#PasswordAuthentication yes //是否允许基于口令的认证
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
#PermitEmptyPasswords no //是否允许使用空密码登入 绝大多情况禁用
#ChallengeResponseAuthentication yes //是否启用质疑-应答认证(s/key认证?)
# Kerberos选项
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
# GSSAPI 选项
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no
UsePAM yes
#是否允许启动PAM身份验证,账户处理,以及会话处理,若启用此选项 PAM身份验证将被允许通过“质疑-应答认证”(ChallengeResponseAuthentication)
#从而绕过"允许 root用户无密码登入".如果您只想让PAM帐户和会话检查在没有和“质疑-应答认证” “no”的情况下运行
#警告:红帽Linux不支持'UsePAM no'选项,若启用会导致一系列问题(原文大致翻译)
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes //打印警告信息和上次登录信息
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no //是否能使用Login命令
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes //是否反解DNS 如果想让客户端连接服务端快一点 可改为no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
UseDNS no
AddressFamily inet
SyslogFacility AUTHPRIV
PermitRootLogin yes
PasswordAuthentication yes
基本操作
环境配置:
(centos7) 服务器:192.168.126.128/jojo.cc 用户:luffy、root
(ubuntu) 客户端: 192.168.126.136/jojo.ubuntu 用户: dio、root
(windows)客户端 192.168.126.1
Linux与Linux口令登入
ssh -参数 用户名@IP地址/主机名
也可以直接ssh IP地址(默认登入的用户是root)
上面的提示是因为第一次ssh远程连接主机,发出警告是否继续连接。确定连接后,系统将永久地添加服务器主机到已知(信任)主机表里。
再次登入就不会出现以上信息了。
最后输入logout或exit退出。
Linux与Linux密钥对登入
1.客户端先生成密钥对
ssh-keygen -t rsa -b 2048
-t 指定密钥的类型 (rsa/dsa)等
-b 指定密钥对长度 (rsa 1024位的已被破解)
可以发现输入命令后会系统会发出两个询问
1.是否将密钥对保存到当前用户的家目录的/.ssh/id_rsa文件下
2.是否对密钥文件加密 (直接回车是不加密)
加密:在调用密钥文件先验证密钥的密码,正确才能调用
不加密:密钥文件可直接被调用,整个登录验证过程无需输入任何密码
(若当前主机是多人使用最好加密,因为我的是试验机,就不加密了)
密钥对生成成功
2.将公钥文件发送到服务器 //若想以root身份来登录 就往服务器的root用户发,其他用户一样
ssh-copy-id luffy@192.168.126.128传输成功后
直接ssh luffy@192.168.126.128 发现已经不需要密码登录了(密钥对的优先级大于密码)
客户端生成的密钥对以及公钥内容
进入服务器相应的用户家目录下,可以发现客户端发过来的公钥。
查看内容,发现一致,证明的确是客户端发过来的公钥。
windows与Linux密钥对登入
windows的口令方式登入与Linux口令登入如出一辙,这里就不再赘述。
这里用的是Xshell.
scp和sftp
scp和sftp都是ssh服务衍生的命令。
scp(secure copy)可以在两台主机间远程拷贝文件。
上传:scp 本地文件 用户名@服务器IP:目录 (端口修改还要加 ‘-P(注意与ssh不同 是P) 端口号’ 选项)
例如 scp /etc/ssh/* root@192.168.126.128:/home/
下载:scp 用户名@服务器IP:目录 本机存放的目录路径
sftp与ftp用法和功能几乎一致,区别是协议不同,sftp传输使用加密/解密技术,较ftp安全,但传输速率比ftp低。
用法这里就不在赘述。
ssh更加安全的配置
1.修改端口号
#Port 22 //自定义端口(端口号范围0~65535,自定义端口尽量在10000以上)
修改完后 以后登入要在后面加上端口号 ssh -p 端口号 用户@服务器IP
2.禁用密码登录
PasswordAuthentication yes //改为no即可
3.密码尝试最大次数
#MaxAuthTries 6 //若已经禁用密码登录就不用考虑这选项
4. 禁止root用户登录
PermitRootLogin no
5.强制使用 SSH Protocol2
Protocol 2
6. 不支持闲置会话
ClientAliveInterval 600 // 600为秒,即600秒后无动作就自动断开连接
7.限制ssh监听IP //本机允许SSH连接的IP
ListenAddress 0.0.0.0 //默认为本机所有IP都可以ssh连接
工具
1.putty
2.XShell
3.SecureCRT
4.mstsc
5.teamviewer
6.QQ
7.向日葵远程控制软件
8.anydesk