公開鍵認証
- 鍵生成(rsa方式なら4096bit以上が好ましい)
- $ ssh-keygen -t rsa -b 4096
- 対応してるならed25519を使う
- $ ssh-keygen -t ed25519
- 別名で保存
- $ ssh-keygen -f ${output} -C ${comment}
- 公開鍵をサーバーに設置
- $ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys (.pubの中身をコピーして貼り付け)
sshの設定(~/.ssh/config)
- ユーザー名とアドレスの省略
- Host "好きな名前"
User [username]
Hostname [hostname/IPアドレス] - 鍵の指定
- IdentityFile [密鍵秘]
- 多段ssh
- ProxyCommand ssh -W %h:%p [踏み台にするホスト]
(ProxyJump [ホスト] でも最近はいけるようになった)
Rootだけ公開鍵認証を強制する
- /etc/ssh/sshd_config (サーバー側)
- PermitRootLogin without-password
- SELinuxの設定をしている場合
- # restorecon -R -v /root/.ssh
文字コード変換
- 文字コード確認
- $ nkf --guess ${file}
- UTF-8に変換
- $ nkf -w --overwrite ${file}
ユーザー制御
- wheelグループに追加
- # gpasswd -a ${user} wheel
- ログイン不許可
- # usermod -s /sbin/nologin ${user}
- 削除
- # userdel [-r] ${user}
nfsの設定
- サーバー側(/etc/exports)
- /mnt/hoge 192.168.1.0/24(rw,async,no_root_squash)
- 有効化
- # exportfs -ra
- クライアント側
- # mount hostname:/mnt/hoge /mnt/hoge
iscsiの設定
- ログイン
- # iscsiadm -m discovery -t sendtargets -p ${IP}
# iscsiadm -m node --targetname ${TARGET} --login
# dmesg/tail などでマウント位置を確認 - 後からマウント位置を確認
- # iscsiadm -m session -P 3
- フォーマット(sdcの場合)
- # parted /dev/sdc
(parted) mklabel gpt
(parted) unit TB
(parted) print free
(parted) mkpart
ファイルシステムの種類: xfs
開始: 0
終了: -1
(parted) q
# mkfs.xfs /dev/sdc1 - マウント
- # mkdir -p /mnt/hoge
# mount /dev/sdc1 /mnt/hoge - 確認
- # iscsiadm -m node session
- ログアウト
- # iscsiadm -m node --targetname ${TARGET} --logout
- 削除
- # iscsiadm -m node -o delete ${TARGET} -p ${IP}
削除後に再度マウントしようとしてUUIDが重複している場合
- 無視してマウント
- # mount -o nouuid /dev/sdc1 /mnt/hoge
- アンマウントしてuuidを作り直す
- # xfs_admin -U generate /dev/sdc1
自動バックアップ
- ftp,lftp接続時のパスワード入力を省略
- $ cat > ~/.netrc << _EOT_
machine ${IP}
login ${user}
password ${password}
_EOT_ - バックアップリストの利用
- echo "/var/www/html" >~/backup_list
#ローカルのバックアップ
tar czfP backup_$(date +%y%m%d).tar.gz -T ~/backup_list
ftpを使用
ftp.sh
#!/bin/bash
[ ! -e ~/.netrc ] && echo "not found ~/.netrc" && exit 1
SERVER=
REMOTE_DIR=
LOCAL_FILE=
# -d: enables debugging
LANG=C ftp -d << _EOT_
open $SERVER
cd $REMOTE_DIR
put $LOCAL_FILE
bye
_EOT_
lftpを使用(差分バックアップ)
lftp.sh(~/.lftp/transfer_logに転送ログが残る)
#!/bin/bash
[ ! -e ~/.netrc ] && echo "not found ~/.netrc" && exit 1
SERVER=
REMOTE_DIR=
LOCAL_DIR=
lftp << _EOT_
open $SERVER
mirror -R --delete --only-newer --verbose=3 $LOCAL_DIR/ $REMOTE_DIR/
close
quit
_EOT_
cronでスクリプトを自動実行
- crontabの設定
- $ crontab -e
# 毎朝4時に自動実行
0 4 * * * 実行したいスクリプト(chmod +xを忘れずに)
unisonを使用(双方向同期)
- デフォルトの設定ファイル(~/.unison/default.prf)
- times = true
prefer = newer
ignore = Name .* - 実行
- $ unison $LOCAL_DIR ssh://$SERVER//$REMOTE_DIR -batch
rsyncの使用
- 実行
- $ rsync -avuPh $LOCAL_DIR/ $SERVER:$REMOTE_DIR/
- オプション
- -v: 詳細表示
-a: 属性を保持してディレクトリ内を再帰的にコピー
-u: コピー先の方が更新日時が新しい場合スキップ
-P: 転送状況を表示
-h: 人間にわかる単位で表示
--delete: コピー元で削除されたファイルをコピー先でも削除
--include "hoge": hogeをコピーの対象にする
--exclude "*" : include以外全てコピーの対象外にする