androidapachebackendcentoscentos8.4commandcomposercrontabcurldesigndevelopdockerelasticfinancingfirewallfrontendgatewaygitgolanghybridiisiptablesjavajenkinskuberneteslaravelluamacmemcachemigrationmongodbmysqlnginxnodejsofficeopenrestyopensslperformancephpproductionredisregexprestfulsecurityshadowsocksshellsnippetsshstartupteamtraintravelunitvmwarevsftpwindowsworkwwwyaf

SSH

文件格式

authorized_keys

rsa 格式公钥(部署在 ~/.ssh 中)
-------------------------------
ssh-rsa AAAAB3NzaC1yc2EAAA... Lay-RSA-Key

known_hosts

记录远程服务器对应的公钥信息
-------------------------------
git.oschina.net,120.55.239.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzd...

id_rsa.pub

rsa 格式公钥
-------------------------------
ssh-rsa AAAAB3NzaC1yc2EAAA... Lay-RSA-Key

id_rsa 或 id_rsa.pem

rsa 格式私钥(Git 通信使用)
-------------------------------
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6KHsAAKCAQEA6KHstsAl9e3...
-----END RSA PRIVATE KEY-----

id_rsa.ppk

PuTTY 独有的私钥(可以使用 TortoiseGit\bin\puttygen 生成)
-------------------------------
PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: Lay-RSA-Key
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAI...
Private-Lines: 8
QoV02upH2Id7kEyVZuBxaxX+OO...
Private-MAC: 40757644f8b14a8707b01f44314d6d8ac2386dd9   

权限定义

chmod 0400 /root/.ssh/id_rsa
chmod 0400 /root/.ssh/id_rsa.pub
chmod 0644 /root/.ssh/known_hosts
chmod 0644 /root/.ssh/authorized_keys

常用命令

生成SSH证书并复制到远端服务器

ssh-keygen -y -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub | ssh root@host "cat - >> ~/.ssh/authorized_keys"

通过SSH快速备份文件到另一服务器

tar zcvf - /disk/www/ | ssh root@www.jb51.net tar xzf - -C /backup/www/

登录命令

指定账户

ssh root@192.168.0.11

密钥登录

ssh -i /root/.ssh/id_rsa root@127.0.0.1

指定端口

ssh -p 12333 192.168.0.11 
ssh -l root -p 12333 216.230.230.114
ssh -p 12333 root@216.230.230.114

Git 配置多个 SSH-Key

创建配置文件

# vi ~/.ssh/config

文件内容如下

# Lay
Host gitee.com
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    User git

# XiaoWang
Host gitee
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xw
    User git

配置文件参数

# Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
# HostName : 要登录主机的主机名
# User : 登录名
# IdentityFile : 指明上面User对应的identityFile路径

SCP 远程拷贝

命令格式

scp [参数] [原路径] [目标路径]

命令参数

-1  强制scp命令使用协议ssh1
-2  强制scp命令使用协议ssh2
-4  强制scp命令只使用IPv4寻址  
-6  强制scp命令只使用IPv6寻址  
-B  使用批处理模式(传输过程中不询问传输口令或短语)  
-C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能)  
-p 保留原文件的修改时间,访问时间和访问权限。  
-q  不显示传输进度条。  
-r  递归复制整个目录。  
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。  
-c cipher  以cipher将数据传输进行加密,这个选项将直接传递给ssh。   
-F ssh_config  指定一个替代的ssh配置文件,此参数直接传递给ssh。  
-i identity_file  从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。    
-l limit  限定用户所能使用的带宽,以Kbit/s为单位。    
-o ssh_option  如果习惯于使用ssh_config(5)中的参数传递方式,   
-P port  注意是大写的P, port是指定数据传输用到的端口号   
-S program  指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

指定传输时使用的密钥文件

scp -i /root/.ssh/id_rsa root@127.0.0.1

从远处复制文件到本地目录

scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

从远处复制到本地

scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/

上传本地文件到远程机器指定目录

scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest

上传本地目录到远程机器指定目录

scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest

Windows 免密码登录

配置 vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

#禁止root登录(如果需要)
PermitRootLogin no

上传 id_rsa.pub 到 /root/

scp .ssh/id_rsa.pub root@192.168.1.181:/root/.ssh/id_rsa.pub

复制 id_rsa.pub 到 .ssh/authorzied_keys

cat .ssh/id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

删除 id_rsa.pub

rm ~/.ssh/id_rsa.pub

Putty 配置

/Connection/SSH/Auth    加载私钥文件(Private key)
/Connection/Data        Auto-login 用户名(username)

重启 ssh

service sshd restart

CentOS 7

Step 1

# 修改/etc/ssh/sshd_config
vi /etc/ssh/sshd_config

#Port 22         //这行去掉#号
Port 20000      //下面添加这一行

Step 2

# 允许 ssh-agent 转发
vim ~/.ssh/config

Host *
ForwardAgent yes

Step 3

使用以下命令查看当前SElinux 允许的ssh端口:
semanage port -l | grep ssh

添加20000端口到 SELinux
semanage port -a -t ssh_port_t -p tcp 20000

然后确认一下是否添加进去
semanage port -l | grep ssh

如果成功会输出
ssh_port_t      tcp     20000, 22

Step 3

systemctl restart sshd.service
service sshd restart

Mac

默认终端

ssh-agent
ssh-add ~/.ssh/id_key

iTerm2,Default > Command > Send text at start

ssh-agent; ssh-add ~/.ssh/id_rsa.pem;