公開鍵認証

鍵生成(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以外全てコピーの対象外にする

備忘録(Japanese)

Menu

to top