分类 Unix 下的文章

[分享] SSH和Git共享22端口,适用于docker或者frp转发

先说下我的使用场景:

  1. 我有一台跑在腾讯云上的VPS,就是此博客系统所在的机器,这台机器是有公网IP的
  2. 在我家里的内网,有一台4核16G的小型服务器,没有公网IP,运行Proxmox VE虚拟了各种服务,其中包括Gitea
  3. 我通过frp转发暴露内网的Gitea到公网
  4. 在这之前我一直使用HTTP协议上传或者下载代码,现在觉得太麻烦想用SSH协议

如果你跟我的场景类型,此文很适合你,如果你是同一台机器上docker宿主机之间22端口共享问题,文末官方文档更适合你。

本文也是参考了文末官方文档的实现,但是有部分不太一样。

- 阅读剩余部分 -

[记录]Proxmox VE 通过外部 SMTP 服务器发邮件,同样适用其他调用Postfix的服务

PVE默认发送的邮件会被丢垃圾箱,所以想改为自己的SMTP

安装SASL依赖

SSH登录或在Web控制面板点击>_Shell输入:

apt-get install -y libsasl2-modules

配置Postfix信息

修改 /etc/postfix/main.cf 尾部添加:

relayhost = smtp.exmail.qq.com:465
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sender_dependent_authentication = yes
smtp_generic_maps = hash:/etc/postfix/generic
smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

relayhost 需要改为自己的SMTP服务和SSL端口号
注意 /etc/postfix/main.cf 文件应该还有一个内容为空的 relayhost 默认配置请删掉或者注释


- 阅读剩余部分 -

[原创]搭建自己的 Ngrok 服务器, 并与 Nginx 并存

Ngrok 是一个内网穿透工具, 用来将内网的一些服务器暴露到公网上, 目前支持 HTTP 和 TCP 端口转发.

Ngrok 官方提供的服务器因为一些原因导致可用率不高, 但是他们开源了 1.x 版本的服务器端代码(目前最新是 1.7), 这样就可以自己搭建了.

Ngrok Server 端部署

这个比较简单, 参考官方的文件就可以, 步骤无非就是: 拿到代码, 安装 go, 进行编译.

文档地址: https://github.com/inconshreveable/ngrok/blob/master/docs/DEVELOPMENT.md

编译完成后, 执行 ngrokd -h, 输出如下:

Usage of bin/ngrokd:
  -domain="ngrok.com": Domain where the tunnels are hosted
  -httpAddr=":80": Public address for HTTP connections, empty string to disable
  -httpsAddr=":443": Public address listening for HTTPS connections, emptry string to disable
  -log="stdout": Write log messages to this file. 'stdout' and 'none' have special meanings
  -log-level="DEBUG": The level of messages to log. One of: DEBUG, INFO, WARNING, ERROR
  -tlsCrt="": Path to a TLS certificate file
  -tlsKey="": Path to a TLS key file
  -tunnelAddr=":4443": Public address listening for ngrok client

参数比较简单, 指定域名, http 端口, 日志, ssl 证书, 隧道端口.
这里有个问题就是, 80, 443 已经让给 nginx 使用了, 虽然 ngrok 能指定到其它端口, 但是在客户端连接后:

QQ20150903-2@2x.png

一个是 https 识别错误, 一个是访问的时候加端口麻烦, 就算用 nginx 再次代理, 但是客户端显示的端口是没有变化的.


- 阅读剩余部分 -

[转载]Git 忽略 chmod 更改

利用git来进行web开发的时候,通常涉及到文件权限的更改是不需要让git变更的。所以我们需要让git来排除chmod更改。

我们打开shell, cd到git根目录,执行命令: git config core.filemode false

然后我们再来执行git status就会发现少了很多需要变更的文件

建议设置到全局, 命令改为: git config --global core.filemode false

今天被一个同事一次提交近300个文件的更改(全部chmod...)吓到了, 提交前也不对比下, 不过 Gitlab 居然没有卡死.

参考: Git忽略chmod更改

[记录]Nginx 指令 Map 应用场景之: 统一 PHP 开发环境

在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.

大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.

这里尝试给出另外一个方案, 个人觉得可行性还是很大的.

本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7

思路

  1. 开发人员通过 Samba 共享代码
  2. 服务器分别挂载开发人员共享到服务器
  3. 服务器配置根据开发者 IP 使用不同的代码


- 阅读剩余部分 -

[总结]利用 Privoxy 让命令行下的 wget 和 curl 等命令实现自动代理

curl 和 wget 都可以通过附带参数来使用代理

curl -x http://127.0.0.1:8087 github.com
wget -e "http_proxy=127.0.0.1:8087" github.com

临时用用还好,但是经常使用也就麻烦了,可以通过配置文件简化

shell> cat ~/.wgetrc
https_proxy = http://127.0.0.1:8087
http_proxy = http://127.0.0.1:8087
ftp_proxy = http://127.0.0.1:8087

use_proxy = on
continue = on
check_certificate = off

shell> cat ~/.curlrc
-L
proxy = 127.0.0.1:8087

参数解释:

- 阅读剩余部分 -

[转载] awk与cut在以空格为分割域时的区别

原文地址:awk与cut在以空格为分割域时的区别

awk默认以空格为分割域,比如我想获得某进程pid:

[[email protected] ~]# ps -ef|grep "sshd -f"|grep -v grep
root      5088     1  0 14:28 ?        00:00:00 /usr/sbin/sshd -f /app/oslinkd/oslinkd_config

用awk如下写:

ps -ef|grep "sshd -f"|grep -v grep|awk '{print $2}'

这样即可获得pid : 5088

但是用cut,若以空格为分隔域,则并不是第二个域,而是第七个域,因为root与5088之间有6个空格:

ps -ef|grep "sshd -f"|grep -v grep|cut -d' ' -f7

结论:
awk 以空格为分割域时,是以单个或多个连续的空格为分隔符的;
cut则是以单个空格作为分隔符。

[记录]Gitlab 在安装完成后才启用 HTTPS 记得重新清理 assets

不然浏览器就会提示:

与 git.fengqi.me 的连接采用 128 位加密技术。但是,此页中包含其他不安全的资源。他人能在传输过程中查看这些资源,攻击者也可以进行修改,从而改变网页的外观。

该连接使用 TLS 1.2。


该连接使用 AES_128_GCM 进行加密和身份验证,并使用 ECDHE_RSA 作为密钥交换机制。

重新清理生产 assets 就好了:

cd /home/git/gitlab
sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

刷新浏览器.