Monthly Archives: January 2015

mac下配置centos的ssh登录使用RSA公私钥

1. 在本地的mac生成密钥对

OpenSSH 提供了ssh-keygen用于生成密钥对,不加任何参数调用即可:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa):

如果你以前没有生成过密钥对,直接回车就行(vi ~/.ssh/id_rsa检查下,避免覆盖,如果生成过,请输入新的文件名)。

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/user/.ssh/_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
8a:77:ec:a1:77:42:8d:5d:ab:17:33:ac:87:06:20:3c user@mbp101
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|   .             |
|    E .     .    |
|     o .S+ o .   |
|     . o+ o *    |
|    . o.+. + +   |
|     . +o.* o    |
|      ...+ o     |
+-----------------+

如果你不想每次连接时都被问及密码(它是用来解开特定的公钥),在创建密钥对的时候,你只须按 enter 作为密码。创建密钥对时,是否以密码加密纯粹是你的决定。如何你不将密钥加密,任何人夺得你的本地机器后,便自动拥有远程服务器的 ssh 访问权。此外,本地机器上的 root 能够访问你的密钥:但假若你不能信任 root(或者 root 已被攻占),你已经大祸临头。将密钥加密舍弃了不用密码的 ssh 服务器,来换取额外的安全,得来的就是输入密码来使用这条密钥。

注意:在这里我并没有默认使用id_rsa,因为我的id_rsa已经有了东西,所以我用了xxx_rsa,这里需要额外配置~/.ssh/config

加入

Host yongyao.li
        User xxx
        Hostname yongyao.li
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/yongyaoli_rsa

使ssh能正确查找到私钥,而且我为私钥设置了密码,在登录时mac的keychain会弹出,输入后keychain会记住,不用每次都输入私钥保护密码。

2. 上传密钥

把你的公钥用scp或者sftp上传到了远程远程ssh服务器,并把公钥的内容追加到ssh服务器的 ~/.ssh/authorized_keys:

$ scp ~/.ssh/id_rsa.pub user@host:
$ ssh root@host
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

3. ~/.ssh 相关文件权限

现在为本地mac的私钥设置权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

设置centos服务器上的文件权限:

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

如果 /etc/ssh/sshd_config 内的 StrictModes 被启用(缺省值),以上的权限是必须的。

4.一旦你检查过可以用密钥对来登录服务器,你可以在你的centos服务器的 /etc/ssh/sshd_conf 内加入以下设置来停用口令验证:
# 停用口令验证,强制使用密钥对

PasswordAuthentication no

重启sshd

# service sshd restart

这是换一台机器或者虚拟机进行登录,会提示以下

# ssh xxx@yongyao.li
Permission denied,  (publickey,gssapi-keyex,gssapi-with-mic)

iOS使用自定义字体

iOS 6 自带字体:iOS 6: Font list

iOS 7 自带字体:iOS 7: Font list

OS X Mavericks 自带字体:
OS X: Fonts included with Mavericks

上面两篇文档里列出的字体名字并非编程时用的fontName,只是对应的字体文件的名字。

可以使用下面的代码查系统自带字体的 fontName,在任意 UIViewController 里加上:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    for (NSString* family in [UIFont familyNames])
    {
        NSLog(@"%@", family);
        for (NSString* name in [UIFont fontNamesForFamilyName: family])
        {
            NSLog(@"%@", name);
        }
    }
}

以下是真机 debug 在控制台打印出来的:

Thonburi
Thonburi-Bold
Thonburi
Thonburi-Light
...
Didot-Bold
Didot-Italic
Didot
DIN Alternate
DINAlternate-Bold
Bodoni 72 Smallcaps
BodoniSvtyTwoSCITCTT-Book

加入我想要在 iOS 的 UILabel 中使用 mac 中自带的Yuanti SC,怎么搞?
1.下载你想要的字体的字体文件,可以是 ttf、otf、ttc 等格式(ttc 格式需要特别注意),此处我从 mac 的系统默认字体存储目录拷贝;
2.把字体文件添加到 xcode 项目中;
2.在Info.plist添加以下代码并保存;

    
   UIAppFonts
	
		Yuanti.ttc
		WawaSC-Regular.otf
		Lantinghei.ttc
		汉仪楷体简.ttf
	
   

B261A1C3-2E8F-4006-8AFE-B4831828E225
3.在 Build Phases/Copy Bundle Resources添加字体文件;
70428009-10BC-4667-B5B7-D985179CC12F
4.使用上面 viewDidLoad 代码查找新增的 fontName,比如我添加 Yuanti.ttc 后新增了

Yuanti SC
STYuanti-SC-Light
STYuanti-SC-Bold
STYuanti-SC-Regular

最后在代码中

self.contentLabel.font = [UIFont fontWithName:@"Yuanti SC" size:16.0f];

效果:
83E5E5D7-4417-4015-BAB0-80EE6964554B

Lantinghei.tcc 下面包含8个字体。

Lantinghei TC //繁体细
FZLTXHB--B51-0 //繁体extralight
FZLTTHB--B51-0 //繁体heavy
FZLTZHB--B51-0 //繁体demibold
Lantinghei SC //简体
FZLTZHK--GBK1-0 //简体demibold
FZLTTHK--GBK1-0 //简体heavy
FZLTXHK--GBK1-0 //简体extralight

如果不适用粗体,就直接用Lantinghei SC就可以了。

ttc 字体文件是字体集合,提取 ttc 字体名方法:

-(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size
{
    CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
    CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
    CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);
    CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);
    NSMutableArray *customFontArray = [NSMutableArray array];
    for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){
        CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);
        CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);
        NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));
        UIFont *font = [UIFont fontWithName:fontName size:size];
        [customFontArray addObject:font];
    }
    
    return customFontArray;
}

另一种思路是直接从 ttc 提取 ttf,有待研究。

参考资料:

Tutorial: Porting fonts to the iPhone

osx文件权限中的@和+

If the file or directory has extended attributes, the permissions field printed by the -l option is followed by a ‘@’ character.
Otherwise, if the file or directory has extended security information (such as an access control list), the permissions field printed by the -l option is followed by a ‘+’ character.

显示文件[夹]:
chflags nohidden ~/Library
如想隐藏,可以在终端中执行命令:
chflags hidden ~/Library

-rw-------@   1 wingyiu  staff  626164 Aug 12  2013 Bookmarks.bak
drwxr-xr-x+   3 wingyiu  staff     102 Jan  2 20:09 Desktop
drwxr-xr-x+  34 wingyiu  staff    1156 Dec 24 19:11 Documents
drwx------+ 278 wingyiu  staff    9452 Jan  5 20:20 Downloads
drwxr-xr-x   34 wingyiu  staff    1156 Dec 23 23:40 Git
drwxr-xr-x   87 wingyiu  staff    2958 Dec 30 23:50 Github
drwx------+  70 wingyiu  staff    2380 Jan  3 17:17 Library
drwx------+   4 wingyiu  staff     136 Jan  2 20:57 Movies
drwx------+   7 wingyiu  staff     238 Oct  7  2013 Music
drwx------+ 252 wingyiu  staff    8568 Jan  5 19:57 Pictures
drwxr-xr-x+   4 wingyiu  staff     136 Sep 28  2012 Public

MBP101 Yosemite升级 SSD

本人机子为MacBook Pro (13-inch, Mid 2012),系统已经升级为OS X 10.10.1 Yosemite;光驱位和硬盘位置的SATA均为 SATA3,但硬盘仅支持 SATA2,所以协商以 SATA2速度运行。
mac check sata 3
一番 V2EX 和 Google 发现 Yosemite 引入一个叫 kext signing 的东西,默认开启,开启后会禁止使用未经苹果认证授权的第三方硬件,也会影响 TRIM 的使用。
TRIM 可以对 SSD 进行增强,比如稍微提高读写速度、使用寿命等。在这篇文章FAQ and support for using Trim Enabler in OS X Yosemite里提到了。

在旧版本系统里通常是使用 Trim Enabler 来开启Trim 的,免去敲命令行的烦恼。现在多了 kext signing,就必须先关闭 kext signing。在 Trim Enabler 3.3 以上版本已经集成了 kext signing 开关闭的功能。我用的是4.0.4。trim enabler turn off kext signing

按流程走,重启后重新打开 Trim Enabler,再开启 Trim 就可以了。

最好拿个足够大的移动硬盘做一个 Time Machine 备份,以免玩大了搞坏原硬盘丢了数据。

准备材料:
1、SSD,我采用的是 SamSung SSD 840 EVO,目前价格约850RMB;
2、光驱硬盘托架,我采用的是Nimitz OptiBay-3,购买时要注意托架的厚度,是否支持 SATA3 ;
3、可选的 USB 外置吸入式光驱盒,用来把拆下来的光驱做成外接 USB 光驱;
4、拆机工具,买2、3时有赠送。
硬盘托架和光驱盒加起来大概100+。

详细拆解更换可以参考 Zealer 王自如的视频Macbook Pro 改装 RAID

搞定后启动 Mac,对新硬盘进行初始化、格式化。

本来想用 USB 移动硬盘进行 Time Machine 备份,然后进入 Recovery HD 把备份回复到 SSD 盘上,奈何移动硬盘有很多资料,也没分区。Recovery HD 在从10.9升级到10.10时已经损坏,双系统 Win 7也进不去。只能用别的方法了。

解决方法是使用Carbon Copy Cloner,把整个机械盘的数据复制到 SSD 上。如果你的 SSD 介绍,可以选择删掉旧硬盘部分数据,所以选择性的复制。比如指复制系统和 Applications。我在清除很多无用、冗余、旧数据,把大小降到200一下,进行的整盘复制。复制花费时间较长,主要是因为机械盘读较慢,小文件过多。用了大概3个小时。复制完会提示给 SSD 创建 Recovery HD,我的旧 Recovery HD 已经损坏,且 SSD 空间所剩不足就放弃了。

ccc hd to ssd

重启后按住 option 键,选择 SSD 启动。进入系统配置,把 SSD 改为启动盘,这样每次启动就会载入 SSD 上的系统了。

change mac startup drive

关于HD和 SSD 如何组合发挥SSD 读写快容量小、HD 容量大速度慢的功效,大概有 Fusion Driver,Raid 0, Raid 1,SSD 做系统启动盘、机械盘做数据、挂在其文件系统下,比如/home。这个日后再研究。