一般的用户名密码认证不安全,很容易被暴力破解,还不方便;而大多数人都是选择使用 SSH 密钥认证,不仅安全还不用每次输密码

ssh密钥对

# 使用 ssh-keygen 生成非对称密钥,一路回车即可
ssh-keygen # 执行完毕之后,会在 ~/.ssh/ 目录下生成 id_rsa 私钥、id_rsa.pub 公钥
# 公钥是可以公开的,放在你要登录的 ssh 服务器上(~/.ssh/authorized_keys)
# 私钥不可以公开,自己要保管好,别弄丢了,通常放在 ~/.ssh/id_rsa 默认路径; # 接下来将公钥部署到服务器
## ssh-copy-id 方式(会自动配置好权限)
ssh-copy-id USER@SSH_SERVER
## 手动复制方式
scp -Cpr .ssh/id_rsa.pub USER@SSH_SERVER:.ssh/authorized_keys
############################################################
authorized_keys
#############################################################
# 如果 authorized_keys 已经有公钥了,不能这样直接复制,需要追加进去
## 先将生成的公钥拷贝到服务器上
scp -Cpr .ssh/id_rsa.pub USER@SSH_SERVER:.ssh/tmp_public_key
## 然后登陆到服务器上,添加公钥
cd ~/.ssh/
echo >> authorized_keys
cat tmp_public_key >> authorized_keys # 如果是手动添加的,还需要配置权限
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/authorized_keys
Bash

ssh自动登录

# 配置完成后,我们就可以使用 ssh-key 进行登录了
ssh USER@SSH_SERVER # 还可以配置 ~/.ssh/config,使用别名登录
vim ~/.ssh/config
--- config ---
Host Server_A
HostName 192.168.1.1
Port 6666
User root
IdentityFile ~/.ssh/id_rsa/private_key.a
Host Server_B
HostName 192.168.2.1
Port 7777
User root
IdentityFile ~/.ssh/id_rsa/private_key.b # 使用别名登录服务器
ssh Server_A
ssh Server_B
Bash

ssh使用代理

连接国外 VPS 时,因为某些原因,ssh 连上了很卡,而且经常失去连接,因此需要让 ssh 走代理加速

ssh 使用 socks5、http_connect 代理:
ssh -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" USER@SSH_SERVER,通过 socks5 代理
ssh -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" USER@SSH_SERVER,通过 http_connect 代理

scp/sftp 使用 socks5、http_connect 代理:
scp -Cpr -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" files USER@SSH_SERVER:/tmp/
scp -Cpr -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" files USER@SSH_SERVER:/tmp/
sftp -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
sftp -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" USER@SSH_SERVER

如果你使用的是 XShell,也可以设置代理:
属性 -> 连接 -> 代理 -> 添加、选择代理服务器 -> 重新连接ssh

scp传输文件和文件夹

#向远端传文件
$ scp [-r] dir/file_name user_name@ip_addr/domain_name:dir #从远端往本地传文件
$ scp [-r] user_name@ip_addr/domain_name:dir/file_name dir

usr_name是用户名

ip_addr是ip地址

domain_name是域名

当不输入user_name的时候会默认使用本地用户名

dir是文件目录

file_name是文件名

如果传输的是文件夹需要加上-r参数,传送文件不用

同样的,每次输入ip地址或者域名都太复杂了,刚刚的~/.ssh/config文件还在,完全可以执行

$ scp [-r] dir/file_name alias_name:dir

$ scp [-r] alias_name:dir/file_name dir
# 传输到本地时可以使用相对路径,当前目录可以用.替代,上级目录可以用..替代

进行传送文件。

远端dir如果值为空,默认传输到服务器用户的家目录下

$ scp [-r] dir/file_name alias_name:
# 等同于#
$ scp [-r] dir/file_name alias_name:~
#############################################

有两台服务器,client端没有root权限,接收端server有root权限。现在需要从client端免密scp文件到server端。
因为client端没有.ssh文件夹的访问权限,所以不能直接使用client端的密钥,需要从server端生成密钥文件。
整个流程操作步骤如下:
1、server端生成密钥,并且把公钥添加到authorized_keys
2、把私钥上传到client端
3、使用scp -i指定密钥传输

# 把本地的 /path/to/local/file 文件传输到远程的 /path/to/remote/file
scp -P port /path/to/local/file user@remote:/path/to/remote/file # 也可以使用别名
scp /path/to/local/file lab:/path/to/remote/file # 把远程的 /path/to/remote/file 下载到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file # 远程的默认路径是家目录
# 下面命令把当前目录下的 file 传到远程的 ~/dir/file
scp file lab:dir/file # 加上 -r 命令可以传送文件夹
# 下面命令可以把当前目录下的 dir 文件夹传到远程的家目录下
scp -r dir lab: # 别忘了 . 可以用来指代当前目录
# 下面命令可以把远程的 ~/dir 目录下载到当前目录里面
scp -r lab:dir/ .

server端配置

生成密钥对

执行ssh-keygen -t rsa,完成之后在/root/.ssh文件夹可以查看到密钥对id_rsa为密钥文件,id_rsa.pub为公钥文件;
执行cp -rf /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys即可

上传私钥

把server端的id_rsa上传至client端即可

使用scp传输

1.命令格式:

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

2.命令功能:

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

3.命令参数:

-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)的选项。

此处用到的就是-i参数
使用前记得把id_rsa权限改成600,权限太大会报错
scp -i id_rsa auto_feature/featurefile/特征库* root@172.16.16.199:/HYTF/TD/特征库文件/第二代特征库/
备注:
1、此处id_rsa必须与server端的公钥配对
2、如id_rsa文件放在其他目录,记得加上路径

####################################
在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示: 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 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 the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host is36::a6:e6:::6b::d7:f4:df:1f:c2:e7::cc.Please contact your system administrator.Add correct host key in /u/xlian008/.ssh/known_hosts to get rid of this message.Offending key in /u/xlian008/.ssh/known_hosts:2RSA host key for 135.1.35.130 has changed and you have requested strict checking.Host key verification failed. 

比较奇怪,于是研究了一下。
ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。我在上面列出的情况,就是这种情况。 原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。 有以下两个解决方案:
. 手动删除修改known_hsots里面的内容;
. 修改配置文件“~/.ssh/config”,加上这两行,重启服务器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null 优缺点:
. 需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高;
. SSH登陆时会忽略known_hsots的访问,但是安全性低;
 

ssh实现免密码登录和文件传输的更多相关文章

  1. ssh配置免密码登录

    日常工作中很多情况下都需要登录服务器进行管理,一般都是用ssh进行连接,为了防止密码外泄,可以配置下ssh的免密码登录. 首先服务器两台: A:43.224.34.* B:104.238.161.* ...

  2. linux ssh公钥免密码登录

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 一.SSH公钥登录原理 在平时工作中我们经常要远程登录服务器,这就要用到SSH ...

  3. redhat6.2下的ssh密钥免密码登录(原创)

    这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...

  4. ssh (免密码登录、开启服务)

    ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Unbutun为例.有机器A(192.168.1.155),B(192.168.1.181).现想 ...

  5. SSH安全免密码登录:ssh key

    ssh key 使用非对称加密方式生成公钥和私钥 私钥存放在本地~/.ssh目录 公钥可以对外公开,放在服务器的~/.ssh/authorized_keys 1.linux平台生成ssh key ss ...

  6. ssh/scp免密码登录传输

    # 本地服务器生成key(直接回车默认) ssh-keygen # 将key传输到要登录的服务器 ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP地址 # 输入 ...

  7. SSH之免密码登录

    我的虚拟机: 192.168.91.130  test1 192.168.91.131  test2 192.168.91.132  test3 1.首先在test1上生成秘钥对 之后会生成.shh/ ...

  8. ssh公钥免密码登录

    1,生成公钥 ssh-keygen -t rsa 2,上传至服务器 将个人电脑的公钥添加到服务器 cat id_rsa.pub >> ~/.ssh/authorized_keys 3,本地 ...

  9. Mac下到Linux主机ssh免密码登录

    最近忙得忘乎所以,写篇博客放松放松,RT,直接上命令好了 # Local ssh-keygen -t rsa scp ~/.ssh/id_rsa.pub username@server:~/.ssh/ ...

随机推荐

  1. <Django> MVT三大块之Template(模板)

    1.模板简介 创建项目,基本配置 第一步:配置数据库 第二步:创建APP,配置APP 第三步:配置模板路径 第四步:配置分发urls.py(APP里面的) 根目录下,增加命名空间namespace,作 ...

  2. <Python基础>装饰器的基本原理

    1.装饰器 所谓装饰器一般是对已经使用(上线)的函数增加功能. 但是因为一般的大公司的严格按照开放封闭原则(对扩展是开放的,对修改是封闭的),不会让你修改原本的函数. 装饰器就是在不改变原本的函数且不 ...

  3. USACO 2006 November Gold Fence Repair /// 贪心(有意思)(优先队列) oj23940

    题目大意: 输入N ( 1 ≤ N ≤ 20,000 ) :将一块木板分为n块 每次切割木板的开销为这块木板的长度,即将长度为21的木板分为13和8,则开销为21 接下来n行描述每块木板要求的长度Li ...

  4. C# 中的三个高级参数 params

    params params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组. 还可以不发送参数. 在方法声明中的 params 关键 ...

  5. 关于java 线程的停止同时用 interrupt 和 join 的作用

    /** * @FileName: ThreadTest.java * @Description: * @Author : xingchong * @CreateTime: Sep 22, 2018 1 ...

  6. 任意文件读取漏洞常用payload合集

    直接整理到github上了,https://github.com/tdifg/payloads 其他payload以后不定期更新

  7. Axios的get和post请求写法

    执行get请求 // 为给定 ID 的 user 创建请求 axios.get('/user?ID=12345') .then(function (response) { console.log(re ...

  8. Spring Boot与监控管理

    概念: 通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能.我们可以通过HTTP,JMX,SSH协议来进行操作 ...

  9. CSS工程化

    CSS工程化 引言: 你在编写CSS代码时,是否遇到过这样的问题: 代码没有层次结构,难以看出嵌套关系 .site-footer .footer-container .footer-menu { di ...

  10. Android基础控件Button的使用

    1.相关属性 Android的按钮有Button和ImageButton(图像按钮),Button extends TextView, ImageButton extends ImageView! a ...