设置 SSH Key 登录服务器和 Git 服务器
设置 SSH Key 登录服务器
通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里。
Ssh key 的基本原理是这样的:在你的本机上创建两个Key文件,一个是私钥,一个是公钥,私钥放在本地,公钥放在远程服务器。当你通过ssh key登录到远程服务器时,远程服务器使用公钥创建了一个加密的随机消息,然后发送到本地机器,本地机器使用私钥解密消息,发送解密的消息到远程服务器。远程服务器验证这个解密后的消息,然后授权访问。实际过程比这个复杂,但我们这里理解大概就可以了。
使用下面的命令创建Key文件:
ssh-keygen
按照界面上的提示操作,最终生成了两个文件:~/.ssh/id_rsa.pub(公钥) 和 ~/.ssh/id_rsa(私钥)。私钥文件放在本地机器,并且要保密,不能让别人知道。公钥要复制一份放到远程服务器上面。
我们使用scp命令来复制公钥文件到服务器:
scp ~/.ssh/id_rsa.pub <your username>@<your servername/ip>:
'''注意:末尾有一个:冒号!'''这个命令把公钥文件上传到了服务器 /home 目录下面。
下一步,使用该用户名登录服务器,检查 ~/.ssh 目录是否存在,不存在则创建之:
mkdir ~/.ssh
下一步,创建 ~/.ssh/authorized_keys 文件:
touch ~/.ssh/autorized_keys
这个文件将包含一系列允许登录本机的公钥。
然后将公钥的内容加到 ~/.ssh/authorized_keys 文件中:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
最后,我们修改相关目录的权限,只允许 (假设此处用户名为 feiffy) 用户访问。
chown -R feiffy:feiffy ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
大功告成,现在可以直接 ssh 登录远程服务器,而不需要输入密码了。
另外,使用 scp 命令传输文件到远程服务器也不需要密码了。
设置 SSH Key 登录 Git 服务器
有了上面的操作基础之后,就会发现,设置 SSH Key 登录 Git 服务器其实原理是一样。
这里先讲我个人的 Git 远程库的设置,这与 Github 有所不同。
我自己的远程服务器上面的 Git 仓库是用 git init --bare 命令建立的,是这样建立的:
# 登录远程服务器
cd /home/git
mkdir repo.git
cd repo.git
git init --bare
可以看到我使用的是 Git 用户创建的远程仓库,在本机上克隆该仓库只需运行下列命令即可
git clone git@example.com/repo.git
然后需要输入Git用户的密码。现在的目的是设置使用 ssh key 登录,而不需要输入密码。
既然原理与上一篇中的一样,那就不赘述了,为了方便这里直接使用上面生成的两个Key文件:id_rsa,id_rsa.pub,把公钥id_rsa.pub复制到远程服务器的 /home/git/ 目录下面,注意与上文的区别只是不同用户名的区别,其他操作都是一样的。
然后本地连接使用下面的命令,就不需要密码了。
git clone ssh://git@example.com/home/git/repo.git
PS - 个人博客原文:设置 SSH Key 登录服务器和 Git 服务器
参考:
- 《Modern PHP》 7.Procisioning - Server Setup - SSH Key-Pair Autherntication
- Git on the Server - The Protocols
- 2 Simple Steps to Set up Passwordless SSH Login on Ubuntu
设置 SSH Key 登录服务器和 Git 服务器的更多相关文章
- SSH密钥登录让Linux VPS/服务器更安全
查看 /var/log 登录日志文件,突然发现服务器被人扫描端口在进行暴力攻击 平常登录服务器,都是使用用户密码登录,看来这样的做法并不安全,不得不关闭密码登录了. 总结了一个putty使用密钥自动登 ...
- Git使用之设置SSH Key
设置SSH Key 1. 检查是否已经有SSH Key. $cd ~/.ssh 如果说没有这个目录,就直接看第三步 2. 备份 3. 生成一个新的SSH. $ssh-keygen - ...
- github-如何设置SSH Key
设置SSH Key 在注册好github账号后,打开你的电脑桌面上的一个文件夹,这就建立了一个本地工作库,在里面点击鼠标右键,找到你的git bash here-点击开,如图所示:进行下面操作: 输入 ...
- Linux配置使用SSH Key登录并禁用root密码登录(替换同理)
Linux系统大多说都支持OpenSSH,生成公钥.私钥的最好用ssh-keygen命令,如果用putty自带的PUTTYGEN.EXE生成会不兼容OpenSSH,从而会导致登录时出现server r ...
- Linux配置使用SSH Key登录并禁用root密码登录
Linux系统大多数都支持OpenSSH,生成公钥.私钥的最好用ssh-keygen命令,如果用putty自带的PUTTYGEN.EXE生成会不兼容OpenSSH,从而会导致登录时出现server r ...
- 在服务器搭建git服务器
服务端操作 安装Git及创建用户组.用户 123 yum install gitgroupadd gitadduser git -g git 禁止用户git登录 修改/etc/passwd文件: 找到 ...
- 本地ssh key连接多个git账号
在开发过程中,可能需要在本地同时连接到多个gitlab账户,但是一个用户的ssh key只能连接到一个git账户,这就需要创建多个ssh key,分别连接到不同的账户.具体步骤如下: 1.生成ssh ...
- linux下ssh key秘钥登陆远程服务器设置
本地的用户名需要和ssh服务器的用户名一致 1.在Server服务器上加载私钥文件ssh-add wang_rsa 2.如果系统提示:could not open a connection to yo ...
- 创建SSH keys用于添加到Git服务器上
SSH keys SSH key 可以让你在你的电脑和Git服务器之间建立安全的加密连接.先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_rsa.pub 如果你看到一长串以 s ...
随机推荐
- python—networkx:在一张图中画出多个子图
通过plt.subplot能够在一张图中画出多个子图 #coding: utf-8 #!/usr/bin/env python """ Draw a graph with ...
- App Extension的脱壳办法
App Extension的脱壳办法 从app store下载的app和app extension是加过密的,可以通过otool查看: $ otool -l binary_name | grep cr ...
- 删除CNNIC根证书
操作方法: 1.点击IE工具菜单-->选项-->内容-->证书,在受信任的根证书颁发机构中找到CNNIC Root,将证书导出到桌面备用. 双击CNNIC ROOT查看这个证书的属性 ...
- std::string与output-operator"<<"的兼容问题
经查阅资料得知,“在某些编译器下std::string,需要使用c_str()才能作为output-operator "<<" 的参数” std::string tit ...
- CodeForces 2A Winner
Winner Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- poj2082单调栈
本来实在做后缀数组的题目的,不巧,碰到了pku3415这题,需要用到单调栈来维护,但是之前又没有学习过单调栈这方面的知识,于是水了几题....... 题意:给你一些连续的小矩形,高宽不定,求最大的矩形 ...
- UML类图<转>
UML类图 解释UML类图: 1. 首先看“动物”矩形框,它代表一个类.该类图分为三层,第一层显示类的名称,如果是抽象类就要用斜体显示.第二层是类的特性,通常就是字段和属性.第三层 ...
- java生成webservice
使用Eclipse生成一个WebService应用 1.创建一个Dynamic web project 2.创建一个对外提供服务的类.比如: package com.guorui.services; ...
- ajax——实现三级联动下拉列表
数据库: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- selenuim爬虫实战 (下)
SuperLOFTERDownloader7.java package test; import java.io.IOException; import java.util.ArrayList; im ...