変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

SSH

[VScode]リモートサーバに繋ぐ※メモ書き

VScodeでHTMLやJavaScripの作成やデバッグができるけど、リモートなサーバにはWinSCP等でコピっていたけど今はSSH接続でターミナルやファイル転送やデバッグができる。

1.SSH接続の設定を追加する

まず、左のリモートエクスプローラ(><っぽい奴)からSSHの歯車をクリック。

一番上のconfigを選択

そして適当に追記

Host {SSH接続先メニューのタイトル}
    HostName {リモートホストのIPアドレス}
    User {SSH接続時のユーザ名}
    Port 22  ※多分22でOK
    IdentityFile ~/.ssh/{秘密鍵ファイル名のハズ}

Host のタイトルを {ユーザ名}@{表示名} のように書いたら、

プロセスが、存在しないパイプに書き込もうとしました。

とかエラーになった。

{表示名}_{ユーザ名}はOKなので@だけ失敗するかもしれない。

タダの表示名では無い様だ。

Ctrl+Sで保存

2.SSH鍵ファイルの作成と転送

昔はPuTTYをインストしてKEY-GENで作って出来たものを変換して・・・だったけど、

今はWindowsのコマンドプロンプトで作成できる。

※元ネタ:SSH鍵の生成と使用ガイド(Windows対応)

> dir "%USERPROFILE%\.ssh"         ※ SSH鍵を保存する .ssh フォルダがあるか調べる
> mkdir "%USERPROFILE%\.ssh" ※ .sshフォルダが無かったら実行する
> ssh-keygen -t rsa -b 4096 -f "%USERPROFILE%\.ssh\id_rsa" -N ""    ※このコマンドで作ってくれる

出来た公開鍵を使って下のスクリプト7行を{…}内を修正した内容をコピって

PowerShellにペーストしてリモートのホストの認証リストに追記させる。

※元ネタ:Windowsでssh-copy-idっぽいことをしたい

※改行を無視させる文末の「`」の前に半角空白が必須

$sshUser = '{SSH接続ユーザ名}'
$sshHost = '{リモートホストのIPアドレス}'
cat ~/.ssh/id_rsa.pub | ssh ${sshUser}@${sshHost} `
" `
mkdir -p ~/.ssh && chmod 700 ~/.ssh && `
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys `
"

※ログインするのでパスワード入力応答あり、

これでリモートホストのフォルダを見る度にパスワード入力しなくてもいい。

リモートホストを選択し

なぜかリモートホストのプラットフォームをちゃんと選択すると

自動的に選択したプラットフォーム用のVSCode-Serverがリモートホストにインストされる

それはいいけど英語のメッセージ

和訳すればホッとする内容

これで毎回パスワード入力画面(下図)を見たくて良くなったのはとても気分がいい。

接続するとターミナルか

エクスプローラからソースを選択すれば編集できて保存もやってくれる。

デバッグもソースを手前に表示している状態でメニューの【実行】から

Node.jsを選択すれば、デバッグコンソールで

$  node  {表示してるJSファイル}

してデバッガが起動するのはいつも通り。

ブレークポイントとかウォッチ式も使える。※ import.meta.url 等一部不可

但しVSCodeで開いたフォルダがプロジェクト以外のディレクトリィだとそのディレクトリィをカレントディレクトリィとしてnodeを実行するみたいなので

privateKey: fs.readFileSync(`${__dirname}.ssh/id_rsa`), ※__dirname がホームディレクトリィ
↓
privateKey: fs.readFileSync(new URL(`.ssh/id_rsa`, import.meta.url)), ※ソースのフルパスを使う

とかちょっと修正が必要。



[ReadyNAS212]公開キーでログインできない

アカウント管理画面から公開キーをアップロードできるんだけど・・・

公開キーをアップロードしたら「RSYNCのみ」って書いてあった

TeraTermで公開キーを使ってログインしようとすると

一瞬「Rejected」の文字が見え、直ぐにTeraTermが終了してしまう。

原因は、 アカウント管理画面が複数の公開キーを保存できる様な仕組みになっているけど、

command="/frontview/bin/validate-rsync" ssh-rsa AAAA・・・

となっているので、/frontview/bin/validate-rsync というコマンドを実行して即終了している。

※RSYNCのみなんだからこれで正解なんだろう。

しかも、管理画面で作成した ssh_authorized_keys ファイルは書き換えも上書きもできない。

COMMANDの中身のファイルを見ると、rsync形式のコマンドチェックになっているから、

$SSH_ORIGINAL_COMMANDの内容がrsyncコマンドっぽくないのでダメらしい

しかし、TeraTermから $SSH_ORIGINAL_COMMANDを送る方法が見当たらなし。

見つけてもrsyncのコマンドを実行するだけなんで意味は無さそう。

...
# Add Begin.
"")
RC_FILE=/home/`whoami`/.bash_profile  # Need ".bash_profile" file.
exec $SHELL --rcfile $RC_FILE
;;
# Add End.
*)
echo "Rejected"
;;
esac

これで、 キーストアに「command=”/frontview/bin/validate-rsync”」が書かれているけど、インタラクティブな接続もできるようになる。

TeraTermから $SSH_ORIGINAL_COMMANDを送る方法があれば、rsync コマンド+ログインを送ればいいのかもしれない。

rsync --server****** ; exec $SHELL --rcfile /home/'whoami’/.bash_profile

しかし、問題が発生。今まで他のサーバーでやってる様に

※TeraTermで電子鍵を作成する
※TeraTermでパスワード認証でログイン
※TeraTermに公開キーをドロップする
# mv {公開キーファイル名}  .ssh/authorized_keys

とすると公開キーでログインできるが、管理画面で公開キーをアップロードした後では

ドロップすると、先ssh_authorized_keysの「 /frontview/bin/validate-rsync 」が「rejected」してくる!

authorized_keysと ssh_authorized_keys は併用できるから

TeraTerm用とRSYNC用に分けて運用した方がよさそうだ。




top