Welcome to

快雪Tang

全新的,从头来过,永未竭止,惶恐地

通过堡垒机透明连接到云中任意内网主机

通过堡垒机透明连接到云中任意内网主机,且自由切换到其他主机。 适合于各种公有云环境。   前置条件 你的SSH证书在每一台主机上都有相同的账户名以及控制台登录授权。 这一点其实不怎么容易,比较可行的方法有: 通过自定义镜像预先做好账户名,并用该镜像开机 通过一套ops脚本集,在每台主机上执行一次特定子功能以便建立相同的账户名以及授权 通过ansible或类似的部署工具,执行专用脚本以便建立账户名 关于前置条件的实现,不在本文的讨论范畴,因此这里不再展开细节了。   本机 你的工作主机需要有一点准备:请修改 ~/.bashrc 追加如下语句: ssh -add -K ~/.ssh/id_rsa alias ssh=’ssh -A’ 以上我们假定你的主力SSH证书就是当前账户的缺省证书,否则你需要指定正确的证书路径。 上面的语句将会在SSH会话中携带你的证书到任意位置,当然你也并不必担心证书的泄露问题,你的证书只会存在在内存中。   堡垒机 假定前置条件是满足的,例如已经在某个新的VPC中准备好了自定义镜像,并且新开第一台主机作为堡垒机,并且主机名命名为 cx1ops00,那么 ssh cx1ops00 应该能顺利登录到该主机。 堡垒机需要开启SSH转发,可以修改堡垒机的 /etc/ssh/ssh_config 加入: Host cc*     ForwardAgent yes […]

Read More

运维账户免密sudo

因为背不住,也不想转到脚本那边去check源码,所以快速笔记一下: groupadd -g222 devops groupadd -g225 admin groupadd -g333 hzadmin cat >/etc/sudoers.d/hzadmin<<EEE %devops  ALL=(ALL) NOPASSWD:ALL %hzadmin  ALL=(ALL) NOPASSWD:ALL %admin  ALL=(root) NOPASSWD: /bin/systemctl EEE usermod -aG hzadmin,devops me sudo 命令免密的关键,在于 NOPASSWD:ALL。如果想要给特定账户而不是账户组授予特定权限,则可以用: someone ALL=(root) NOPASSWD: /bin/systemctl 这个示例可以给账户someone授予执行systemctl的权利。类似的journalctl也可以这么做。 不过,也可以选择将账户加入到某个特定组,例如adm组、或者www-data组,的方式来使其具有特别权利。      

Read More

MySQL 日期时间以及时区的最佳实践

简单介绍 MySQL的数据类型中,datetime和timestamp是有点区别的两种字段类型。datetime存储的时间与时区无关,timestamp存储的时间总是为UTC。所以说,datetime的时间戳需要应用去解释所在的时区,而timestamp则没有应用依赖性,它是一个精确的戳记无所谓应用处于哪个时区。 最佳策略 实际的场景中,你的insert/update动作会依据服务器系统时区和mysql配置的不同而带来不同的效果:对于系统时区为utc,或者mysql daemon服务配置为utc,则datetime/timestamp中都是存储的utc时间戳。如果不是这样的场景,则提交insert/update时,需要将datetime字段转换为utc时间戳。 当保证了你的db中只有utc时间戳之后,显示时你需要将时间转换到用户时区。 如果使用nodejs moment来包装时间戳,假定通过mysql driver拿到的datetime形如:”2018-03-09T12:37:59.012009Z“的格式,那么简单地: var dt = ‘2018-03-09T12:37:59.012009Z’ console.log(moment(dt).fromNow()); // xxx天前 console.log(moment(dt).format(‘YYYY-MM-DD HH:mm:ssZZ’)); // 2018-03-09 20:37:59+0800 注意到用户时区有浏览器默认值提供,moment()识别到附带时区指示的时间戳UTC值后能够正确地格式化到用户的时区。 测试mysql的时区设定 可以使用SQL语句来测试或者修改mysql的时区设定: SELECT @@global.time_zone, @@session.time_zone; SET GLOBAL time_zone = ‘+08:00’; SET GLOBAL time_zone = ‘Europe/Helsinki’; SET @@global.time_zone = […]

Read More

未来的随身计算设备,设想

  • Post By:
  • Date:
  • Category: 技术

肯定不是折叠屏,太搞笑。 我想,卷轴样式、耳廓或外耳道植入比较有可能,3d虚拟投射或全息投射有可能,眼底植入有可能。  

Read More

AS 3+, howto get useful databinding message

Android Studio 3+ 适用。 DataBinding 作为Android官方推出的数据绑定框架已经很有一段时间了。作为描述语言,它现在是很成熟的了。作为IDE支持,在AS中你可以上下文敏感地得到语法提示、类名包名自动完成等辅助工具。然而在编译层面,发现数据绑定带来的错误的根源仍然是不容易的。 目前比较有效的方法就是在Terminal窗口中使用: ./gradlew :app:build –info 2>&1 | tee app-build.log 然后在 app-build.log 中耐心寻找错误原因。   Android Official: Data Binding Library Android Data Binding: That <include> Thing

Read More

深切的悼念

钱钟书,张国荣,霍金。 还有一些。 非同凡响的一些人。

Read More

ubuntu 17.10 gnome font size and scale, for HiDPI

  • Post By:
  • Date:
  • Category: 技术

ttddddd的 gsettings set org.gnome.mutter experimental-features “[‘scale-monitor-framebuffer’]” gsettings set org.gnome.desktop.interface text-scaling-factor 1.20        

Read More

MBP切换网络设定

  • Post By:
  • Date:
  • Category: 技术

接上回的 在MBP苏醒时执行自动任务 ,继续说。 今次的重点在于网络切换。 这个任务,要被细分为很多细节,不过并没那么难,都很容易找到恰当的办法。   使用 macOS 的 “位置” 首先,经验告诉我们,在多种场所切换不同的网络配置,最佳方案是“位置 / Location”: 所以,如图所示,首先设定两个位置,一个是Home,一个是办公室。Home设置只有WIFI,IP地址是预分配的:192.168.0.71;办公室呢,WIFI被加入设施列表,但设置为关闭状态,此外Wireless被加入设置列表,作为主要的网络接口,办公室也是DHCP预分配的,WIFI为192.168.0.172,Wireless为192.168.0.72,网关为 192.168.0.254。 为什么不把HOME IP设置的和办公室一样呢?其实也是可以的,因为办公室和家里的网关不同,可以用于区别。我这里设置的不一样更多是一个历史缘由,可以忽略。 macOS的位置功能,允许你将全部网络设施选择性地配置到不同的位置。所以我花了不少时间来试验和选择出了最佳的组合方案,当然,下一次增加更多位置时就简单了,我想我会很快搞的定。   脚本操作 全局变量 PAC=’http://127.0.0.1:9050/pac’ BYPASS=’127.0.0.1 localhost test.local 163.com sina.com.cn’ WIFI=Wi-Fi LOC_WIFI=’HOME’ IP_WIFI=’192.168.0.71′ WIRELESS=’Thunderbolt Bridge’ LOC_WIRELESS=’SUWEI-OFFICE’ IP_WIRELESS=’192.168.0.72′ IP_WIRELESS_wifi=’192.168.0.172′ TD=NONE pac_url=NONE loc=$(c-location) ip=$(c-ip) 操作网络位置: c-location(){ networksetup […]

Read More

在MBP苏醒时执行自动任务

  • Post By:
  • Date:
  • Category: 技术

缘起 今次的起因在于我的本本需要在家里、办公室切换不同的网络,不同的代理、不同的网关等等,每天做两次实在是太超标了,于是就谋求自动化。 编程 经过一段时间的关注,一条编程指南被发现有助于解决问题: Technical Q&A QA1340 当然,Apple的尿性太差,links过一段时间就找不到了,所以这个技术问答实际是 Registering and unregistering for sleep and wake notifications Q: How can my application get notified when the computer is going to sleep or waking from sleep? How to I prevent sleep? 所以,我可以xcode写个console程序,做成服务在后台跑,拿住事件之后fork一个shell做事情就可以了。 […]

Read More

给go项目贡献,好难好麻烦 – I

  • Post By:
  • Date:
  • Category: 技术

如题,非常烦,之前试过一次,现在不想累了。 所以用个临时被动的,直接改,然后做个patch,以后或者分享补丁就是了:   “`bash git diff -p > ~/Downloads/patches/echo-$(git show-ref –head|grep ‘ HEAD’|awk ‘{print $1}’).patch “`   如上,目标路径你自己调整,patch的名字默认是原本的项目名字带上HEAD的hash值,不过还是随你。   精神好的话,可以去做做PR。

Read More