SSHで接続できない

イメージ
 Ubuntuを24.04→26.04 時間があったので、メインマシンのUpgradeを実施。 とはいえ、とはいえ、システムディスク(/)とデータディスク(/home)を分けているのでクリーンなインストールを実施。 (1) USBでUbuntu26.04を起動 (2) /home/user → /home/user_old にリネーム (3) 26.04をインストール これで、/home/user_oldにこれまでの環境が残ったまま、新規userでインストールすれば完了。もともとのuserが使用していたuser_id:1000のままなので、どちらのフォルダも見ることができる。 あとは、使用するソフトをインストールし  /home/user_old 以下から、利用する設定ファイル等をコピーして動作確認するだけ。 Dropbox MEGA などは、先にコピーしてから、フォルダ同期設定をすることで、ダウンロードなどはチェックのみで完了する。 thunderbird brave browser vscode dbeaver-ce typora obsidian LMStudio ollama あたりを移行してほぼ終了 .sshはそのままコピーして完了。 と思っていたら、何故かサーバによっては接続できない場合があることに気づいた。 $ ssh vps 何も返ってこず、接続できない。 でこれまで接続できていたのに、うまく行かない?? 詳細を確認しながら、チェックすることに。 $ ssh -vv vps debug1: OpenSSH_10.2p1 Ubuntu-2ubuntu3.5, OpenSSL 3.5.5 27 Jan 2026 debug1: Reading configuration data /home/user/.ssh/config ︙ debug2: we sent a publickey packet, wait for reply debug1: Server accepts key: /home/user/.ssh/id_rsa RSA SHA256:n5ocPbCvMV4FGFof … … … … … pBuJ/8r/kHGANY explicit agent のように、 認証完了後にシェルが起動せず、応答がない状態になっている。 具体的には ...

現場で書き換え…

ログインスクリプトでエラー

前回、マイクロソフトのサンプルに問題があって、修正が必要と書いたのだけれど、現場でテストしてみると、さらにエラーが発生する。


strGroups = LCase(Join(CurrentUser.MemberOf))

今度は、この記述だ・・・。
どうやら、ユーザのデータを引いた時のOUやグループの設定状況でデータ個数が配列で返らない場合に、うまくjoinできていないらしい。
そこで、

'strGroups = LCase(Join(CurrentUser.MemberOf))
if IsArray(CurrentUser.MemberOf) then
   strGroups = LCase(join(CurrentUser.MemberOf))
else
   strGroups = LCase(CurrentUser.MemberOf)
End if
てな感じで、配列かどうかで処理を分ける必要があるということが判明。
その場で、書き換えてテストしなければならない程の、逼迫ぶりで…。疲れましたゎ。

でも、これで何とか動作するようになり、OKです。
念の為、全て記述しておこう。
Const MANAGER_GROUP = "cn=manager"
Const SUPPORT_GROUP = "cn=support"
'Const STAFF_GROUP   = "cn=staff"
Set wshNetwork = CreateObject("WScript.Network")
'homeはプロファイル設定で掴ませることにするのでコメントアウト
'wshNetwork.MapNetworkDrive "i:" , "\\dc01\home$\" & wshNetwork.UserName
wshNetwork.MapNetworkDrive "s:" , "\\dc01\staff"
Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName)
'strGroups = LCase(Join(CurrentUser.MemberOf))
if IsArray(CurrentUser.MemberOf) then
   strGroups = LCase(join(CurrentUser.MemberOf))
else
   strGroups = LCase(CurrentUser.MemberOf)
End if
If InStr(strGroups, MANAGER_GROUP) Then
    wshNetwork.MapNetworkDrive "m:" , "\\dc01\manager"
'    wshNetwork.MapNetworkDrive "n:" , "\\dc01\support"
End If
If InStr(strGroups, SUPPORT_GROUP) Then
    wshNetwork.MapNetworkDrive "n:","\\dc01\support"
       
End If

度重なる仕様変更

ちなみに、先のスクリプトは、前回とは後半部分が異なっている。
これは、作業途中で現場から、このドライブは共有して欲しくないとか…。
この場で、言うかよ〜! って話です。

まあ、今回導入したところは、基本的にネットワークのちゃんとした利用の仕方を知らないままなんとなく使ってきたという所もあり、いろいろな話をする中で、だったら…こうして欲しい。とか、こんな風に使えれば…みたいな話が出てくるので、利用している人たちの感性はまともと言えるかな。
結局、これまで管理していた人が、そういった情報を吸い上げず、こちらから提供しないことからうまく回っていなかったのかなぁと…。

そんなことを思いながらも、依頼主に確認をし、ドライブマッピングとユーザの関係を変更することに。導入作業前にも確認しているんだけどね〜。

ついでにバッチも実行

ログオンスクリプトには、もう1つ加えておくことにした。
もちろん、サーバは時刻合わせを行なっているんだけど、クライアントがずれてもらっては困る。といってデフォルトの時刻合わせは馬鹿すぎる。

そこで、nettime.batを作成。中身は簡単なもんです。以下の通り。
net time /domain:%userdnsdomain% /set /y
全クライアントが、ログイン時に実行するように設定しておきます。
これで、サーバとの同期は完了するので、困ることはございません。

いろいろと、検討したけどなるべくシンプルに運用したいので、この程度でやめておこうと思っています。

ふう、ドキュメントの作成もあるので、時間取られてなかなかBlogの更新ができませんなぁ
ちうことで、もう少し、今回手間取ったところあたりをまとめておきたいと思います。




コメント

このブログの人気の投稿

MEGAにも弱点があった?

Ubuntu24.04 でGUIが死んだ

VirtualBoxでUSBを使う方法が分かった!