Git多次提交记录合并

开发过程中,使用Git有时候会遇到多次零碎的小提交,想要合并成一个提交记录,这里记录一下操作。

阅读更多

SSH使用指南

SSH使用指南

目录

  • 简介
  • 历史
  • 入门
  • 进阶
  • 原理
  • 参考

简介

SSH(Secure Shell)是一种用于在不安全网络中进行操作网络服务的加密网络协议,提供两台电脑不安全网络间进行认证和加密数据传输。主要用于网络管理员进行远程管理使用,允许用户远程登录、远程执行命令和拷贝文件。

历史

Version 1.x

1995, 芬兰赫尔辛基科技大学的一个研究员Tatu Ylönen设计了第一版的协议(称为SSH-1),并发布了一版免费的软件。

  • 启发:校园网络受到密码嗅探攻击。
  • 目的:代替早期没有提供强认证和保密性的rlogin,Telnet,ftp和rsh协议。

1995的12月,Ylönen成立了一家公司SSH Communications Security来推广和开发SSH,并将后续的版本转为商业软件。

Version 2.x

SSH-2修订版在2006年确认为标准,在安全和特性上都胜过SSH-1,并和SSH-1不兼容。

Version 1.99

一个区分向下兼容的命名方法,指支持2.0和之前版本的一个协议版本。

OpenSSH和OSSH

1999年Björn Grönvall基于原始的SSH v1.2.12开源版本开发了OSSH,不久OpenBSD分叉了OSSH并创建了OpenSSH,此后OpenSSH继续维护广为移植,OSSH被淘汰。

OpenSSH 7.6版本移除了对SSH-1的支持。

入门

SSH可以在多平台下有多种应用场景,包括大部分的Unix变种(GNU/Linux,BSD包括MacOS,Solaris)和Windows。

使用场景:

  • 远程登录
  • 远程执行单个命令
  • 配置无密码登录远程机器
  • 配合rsync备份、拷贝和镜像文件
  • 端口转发或者端口隧道化
  • 实现一个成熟的VPN
  • 远程主机转发X window
  • 从支持Socks协议的SSH客户端进行安全的代理网页浏览
  • 使用SSHFS挂载远程主机的目录到本地主机文件系统
  • 自动化远程监控和管理服务器
  • 支持ssh的移动端或者嵌入式的开发

客户端

Unix和Linux系统中基本都包含ssh命令,这个命令启动SSH客户端用以在远程机器和SSH服务端建立安全的连接,通常使用的是OpenSSH SSH Client。

登录

1
ssh -p port_number remote_username@remote_host
  • -p port_number指定端口号,如果是默认22端口,可省略
  • remote_username为登录用户名
  • remote_host: 主机名,可以是域名或者IP

如果是首次连接该远程机器,则会出现以下的提示信息:

1
2
3
The authenticity of host 'example.com' cannot be established.
DSA key fingerprint is 04:48:30:31:b0:f3:5a:9b:01:9d:b3:a7:38:e2:b1:0c.
Are you sure you want to continue connecting (yes/no)?

选择yes继续后,将会添加这个服务器到你的已知主机列表中~/.ssh/known_hosts:

1
Warning: Permanently added 'example.com' (DSA) to the list of known hosts.

每台服务器都有一个key,上述的问题来确认和保存主机key,在下一次连接服务器时,会确认是否为同一台服务器。连接建立后,用户即认证成功。正常情况下,命令会要求用户输入密码。

退出

使用exit命令退出远程会话

1
exit

执行远程命令

ssh也可以用于不登录服务器直接远程执行命令

1
2
3
ssh host command

ssh host ls /opt

X11转发

1
ssh -X remote_host

服务端

启动ssh服务,服务端ssh的配置在进阶中讲解

1
2
3
4
sudo service ssh start

# 使用systemd的命令
sudo systemctl start ssh

进阶

使用SSH key登录

通过登录ssh时会使用每次输入密码的方式,不过使用SSH的key更方便和安全,配置key稍微麻烦一点,后续就是一劳永逸的事情,直接一条命令或者一个别名直接登录。

创建SSH Key

在你的客户端电脑创建ssh key:

1
ssh-keygen -t rsa

按回车确认,你的key会被创建在~/.ssh/id_rsa.pub和~/.ssh/id_rsa

切换到.ssh目录:

1
cd ~/.ssh

查看各文件的权限:

1
ls -l

输出结果如下:

1
2
3
-rw-r--r-- 1 demo demo  807 Sep  9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

id_rsa是仅文件拥有者可读,需要保持私密;id_rsa_pub可以被共享和读取。

传送公有Key到服务器

拷贝公有Key到服务器:

1
ssh-copy-id remote_host

这个命令会开启一个ssh会话,需要输入密码进行认证;输入密码成功后,将会拷贝公有Key到服务器的认证Key文件中,后续将允许不输入密码登录。

服务端SSH配置

服务端ssh配置是指配置sshd服务,默认情况,配置文件位于/etc/ssh/sshd_config

备份当前配置文件

1
sudo cp /etc/ssh/sshd_config{,.bak}

使用编辑器打开文件

1
sudo vi /etc/ssh/sshd_config

修改部分配置项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 修改端口号,默认为22,修改后客户端连接需要指定这里设置的端口
Port 22

# 设置主机的keys
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# 设置日志级别,排错时可增加日志级别,分别为QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3
SyslogFacility AUTH
LogLevel INFO

# 设置没有登录成功时的连接等待时间
LoginGraceTime 120

# 设置是否允许root用户登录,大多数普通用户能通过sudo提高权限并支持登录的话,该项应该设为yes
PermitRootLogin yes

# 设置安全防范,配置文件不安全时禁止登录
StrictModes yes

# 设置x窗口的转发
X11Forwarding yes
X11DisplayOffset 10

重启服务

上述设置保存后,需要重启服务才能生效

1
2
3
sudo service ssh restart
# 或
sudo systemctl restart ssh

检查配置修改是否有效,在修改配置的时候尽量保证有个用户已经登录连接,帮助设置有误时进行修改。

关闭密码认证

如果你可以安装了ssh key,并且可以通过key免密登录,否则关闭密码认证后将无法登录远程服务器。

使用管理员权限打开配置文件

1
sudo vi /etc/ssh/sshd_config

修改配置文件,关闭密码认证

1
PasswordAuthentication no

有两个配置需要确认设置正确

1
2
PubkeyAuthentication yes
ChallengeResponseAuthentication no

重启服务

1
2
3
sudo service ssh restart
# 或
sudo systemctl restart ssh

此时,密码认证将不可用,你的服务器将只能通过ssh key进行登录。

原理

基本原理

SSH的工作时通过客户端程序连接到ssh服务器。

基于Key的认证工作原理

基于Key认证的方式,需要一对Key,一个私有Key和一个公有Key。
私有Key保存在客户端电脑,并且要是安全和私密的。
公有Key放置在任何你想访问的服务器上。

当你通过键对访问时,服务器会使用公有Key创建一个消息给客户端,并且只有通过私有Key才能读取;接着,客户端发送合适的响应给服务端并认证。

参考

升级博客的Hexo和Next主题版本

本次升级更新了如下内容:

Hexo的版本,从3.3.8升级到3.7.1版本,没有重大的破坏性变更。

主题Next版本,从5.1升级到v6.4.2版本,两者间有不兼容的地方,配置需要重新配;另外,新版本的主题支持更多的特性。

有关Next主题的升级文档,这里给一下官方的指南,希望帮助有需要的朋友

hexo-theme-next中文文档

从 NexT v5.1.x 更新

升级过程中需要注意的是,v6和v5重大的变更之一是,插件依赖需要自己手动安装。

例如,假设你想要在你的站点中使用 fancybox 插件,请进入 NexT 配置文件,你会看到如下内容:

1
2
3
# Fancybox
# Dependencies: https://github.com/theme-next/theme-next-fancybox
fancybox: false

升级愉快!感谢next团队的贡献,v6带来了很多很棒的特性。

Git快速查找笔记

起步

三个配置文件

git config --system:文件位置/etc/gitconfig,系统级配置
git config --global:文件位置~/.gitconfig~/.config/git/config 文件,当前用户配置
.git/config:文件位置仓库.git/config,当前仓库配置

用户信息配置

1
2
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

查看配置

git config --list:列出所有 Git 当时能找到的配置

获取帮助

1
2
3
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
阅读更多

Google搜索引擎的使用指南

这篇文章第一版是在2018年写的,当时写的比较粗糙也没有配图,近期重新翻新并增加一些之前没有提到的功能点,主要作为自己平时的使用指南,如果能帮助到其他人那是更好的。

阅读更多

nginx访问页面报403的解决方法

近期搭建一个Wordpress站点,前期的准备工作完成,登录界面登录成功后,
显示的页面为403,禁止访问。

在网上搜索后,发现问题在于权限的问题,主要是页面文件所在的文件夹的访问
权限。由于nginx默认使用的用户权限无法访问页面的文件,导致报的403。

解决方法:

1、打开nginx.conf文件修改启动用户

1
$ vim /user/local/nginx/conf/nginx.conf

修改开头的用户,
#user nobody

改为
user nginx web;

或者其他用户,格式为用户[空格]用户组

2、重新启动nginx

1
$ /user/local/nginx/sbin/nginx -s reload

此时,重新测试,应该就可以访问成功了。

ssh密钥登录配置

配置密钥可使用户免密ssh方式登录服务器。

配置方法:

生成密钥对

1
$ ssh-keygen

此处可选择生成密钥的文件路径,默认为~/.ssh/id_rsa
密码为可选。

拷贝公钥到服务器

方式一:

1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub xxx@host

方式二:

手动拷贝id_rsa.pub到服务器上,并收到添加认证文件。

1
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

服务器配置

配置服务器上/etc/ssh/sshd_config文件,修改以下配置项

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

修改后,重启sshd服务,根据不同的系统使用相应命令

登录

直接登录

1
$ ssh user@host

如果配置成功,则不需要密码直接登录。

问题

配置成功后,仍提示密码输入

主要原因在于服务器上认证文件及所在目录的权限问题

详情排查步骤可查看文章配置ssh公钥登录提示还是输入密码

解决方法:

1
$ chmod 755 ~/home/xxxuser

Git checkout指定tag的代码

有时候,想要拉取特定标签的代码,比如说1.0.0标签名的代码?

clone

1
$ git clone

先使用git clone克隆这个代码仓库。

checkout

1
2
$ git tag -l
$ git checkout tags/<tag_name>

克隆完代码仓库后,通过检出特定标签的代码。

创建分支

1
$ git checkout tags/<tag_name> -b <branch_name>

更好的方法,检出代码后创建一个新的分支,否则你将会在一个用标签版本号命名的分支上。

参考

Download a specific tag with Git

Linux学习-基础知识部分

这里罗列一些关于学习Linux的基础准备工作,来自《鸟哥的私房菜》,近期准备重新刷一遍,巩固一下Linux的知识和操作。

计算机概论与硬件相关知识

了解计算机的概论,包括一些基本理论知识;以及计算机相关的硬件知识,包括计算机的组成。

Linux的安装和命令

选择一款Linux的发行版并尝试安装。

Linux操作系统的基础技能

了解用户、用户组、权限、程序等概念。

务必学会vi编辑器

所有Unix Like的系统均安装了vi编辑器,平时操作修改配置文件都可能使用到。

Shell和Shell脚本的学习

玩命令行必须要经历的一步,主要包括“正则表达式”、“管道命令”与“数据流重定向”。

软件管理

玩Linux的时候,免不了要自己安装驱动程序或者额外的软件,Tarball/rpm/dpkg等软件包管理工具的使用就很重要了。

网络基础

“IP”、“路由”等概念需要了解,以及再进一步的TCP/IP协议。

参考

[鸟哥的私房菜]
计算机基础
网络基础