Windows に Linux から公開鍵認証方式でsshやscpを実行したい
Window に Linux から公開鍵認証方式でsshやscpを実行したい
Microsoft のOpenSSH が入っているWindows に Linux の OpenSSH から公開鍵認証方式で ssh や scp したい。
Windows の前提
- Windows 10または Windows Server
- 外部からSSH ログインができる
- その際の認証方式はパスワード認証
- 設定を変更するため管理者権限のあるアカウントがある
- 仮でWindows ホスト名は Win-server とする
Windows での作業
1. sshd_configで公開鍵認証方式を有効にする
MicrosoftのドキュメントのWindows Configurations in sshd_config/OpenSSH Server configuration for Windows Server and Windows によると、Windows 用の sshd_config は %programdata%\ssh\sshd_config
(または、C:\ProgramData\ssh\sshd_config
) らしい。
Win-server
に管理者権限でログインして、このファイルを編集する必要がある。該当ファイルを別のフォルダにコピーして、ファイルを編集しそのファイルを元のフォルダに戻すとよい。
なお編集は次の箇所のコメントを外すだけである。
#PubkeyAuthentication yes
次のようになればOK
PubkeyAuthentication yes
2. OpenSSH のサービスの再起動
OpenSSH の設定ファイルsshd_config
を読み込ませるには、OpenSSH サービスを再起動する必要がある。
コントロールパネルから再起動することもできますし、PowerShell からも再起動できるようです。
Linux での作業
1. sshの公開鍵と秘密鍵を作成する
OpenSSH の公開鍵と秘密鍵を用意する。基本的には既存のものを使いまわさない方がいいので作成することになる。
暗号方式としては、ed25519
方式が推奨されているが、RSA
でもよいだろう。
ed25519
方式の暗号鍵なら次のコマンドを実行する。
ssh-keygen -t ed25519
RSA
方式の暗号鍵なら 4096 ビット長の鍵にしておいた方が安心なので次のコマンドで作成する。
ssh-keygen -t rsa -b 4096
2. Windows に公開鍵をデプロイ
Win-server
に公開鍵を登録したい。しかし、Microsoftドキュメントの 公開キーのデプロイ/OpenSSH キーの管理 によると、Windows ではそのアカウントが管理者権限か一般のアカウントかで鍵を登録するファイルが異なるそうだ。
なお、ssh-copy-id
はWindows 向けには動作しないようです。
2-1. 一般ユーザー
ssh-copy-id
は動作しないのですがすることは同じ。
Win-server
の一般ユーザー username
に公開鍵をデプロイするには、そのユーザーのホームディレクトリに.ssh
を作成して、authorized_keys
ファイルに追加する。
まず、Linux から Win-server
に username
として ssh でログインして、ユーザーのホームディレクトリに .ssh
をディレクトリを作成する。Windows はパス区切り文字には/
でも代用できる。Linux では\
が特殊文字と扱われるので避けてみる
設定が完了できていないので、パスワードの入力が必要。
ssh username@Win-server mkdir "C:/Users/username/.ssh"
ディレクトリが存在していた場合は、エラーになります。
エラーにならなかった場合
ディレクトリを作成したら、その中に authorized_keys
を作成して、公開鍵を追加する。
Linux で作成した公開鍵が ~/.ssh/id_ed25519.pub
だったとして次のコマンドを実行する。
設定が完了できていないので、パスワードの入力が必要。
scp ~/.ssh/id_ed25519.pub username@Win-server:C:/Users/username/.ssh/authorized_keys
エラーになった場合
エラーになった場合は、ディレクトリが存在していたのかもしれません。dir コマンドなどで中身を確認するといい。
ssh username@Win-server dir "C:/Users/username/.ssh"
authorized_keys
ファイルがあれば、scp コマンドでファイルを取得して Linux 上で確認しよう。
2-2. 管理者権限のユーザー
Microsoft ドキュメント管理ユーザー/OpenSSH キーの管理 によると、管理者のアカウントの場合は、C:\ProgramData\ssh\
に作成した、administrators_authorized_keys
ファイルに公開鍵を登録する必要がある。
C:\ProgramData\ssh
はすでに存在していることがわかっているので、administrators_authorized_keys
ファイルに Linux から公開鍵をコピーすればいい。また、Windows ならではなだが ACL を設定する必要がある。
ここでは、Win-server
のアカウントはusername
とし、Linux で作成した公開鍵が ~/.ssh/id_ed25519.pub
だったとして次のコマンドを実行する。
scp ~/.ssh/id_ed25519.pub username@Win-server:C:/ProgramData/ssh/administrators_authorized_keys
ファイルを登録したら、ACL を設定する。
ssh username@Win-server icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
3. 確認
Linux から Windows にファイルを送信するなどして確認する。うまくいけば、~/.ssh/config
などの作成も検討しよう。
scp -i ~/.ssh/id_ed25519 test username@Win-server:test
Emacs 28.1 をソースからビルド
Emacs 28.1 をソースからビルド
Emacs 28.1 がリリースされていたのでとりあえずソースからビルドしよう
https://github.com/emacs-mirror/emacs/tags から emacs-28.1 の zip をダウンロード
unzip emacs-emacs-28.1.zip cd emacs-emacs-28.1 ./autogen.sh mkdir -p ~/work/usr/local ./configure --prefix=~/work/usr/local/ make
プロになるJava日記
プロになるJava日記
ISBN:978-4-297-12685-8 の プロになるJava を購入した。Java は雰囲気しか知らなかったのでこの際プロになってみよう。
私の環境
- macOS 12.3.1
- Intel Mac
- 2020 年の 13 インチモデル
- Java
- openjdk version "17.0.2" 2022-01-18
- OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
- OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)
- Intellij Community Edition
- 2021.3.3
1章
- 以前に Intellij をインストールしてあったので、そのまま更新して使うことにした。
- プロになるJava はキーマップの設定をデフォルトにするように勧めていたが、よくわからないのでそのままでいいことと考えた
2章
- Intellij のキーマップがおかしい? →あ、そうかを繰り返してしまう。
3章
3.1 JShell
- JShell は Java9 から導入されたらしい、Java の REPL らしい。
- ふーん、やっぱり Common Lisp のREPLって優れたアイディアだったんだなーと感心。
- あれ、Intellij のファイルの内容をJShell に送信する機能が 3.1章にでてこないぞ?
4章
- 特になし
書き初め
書き初め
- GitLab の 校正役としてがんばった
- FTBFS due to undocumented external dependency #88 への応答
macOS being rebooted
suddenly macOS being rebooted
macOS で LibreOffice とか、Firefox とかをつかっていたら突然黒画面になって再起動した。再起動後にファイルを回復したので特に被害はなかったもよう。
以下は再起動後に Apple に送信したログの一部
panic(cpu 0 caller 0xffffff801eba3da0): "compressed PTE 0xfffffe9d8c223620 0xc010000000000000 has extra bits 0x8000000000000000: corrupted? Adjacent PTEs: 0x80000001cc7c7067@0xfffffe9d8c223618, 0x4000000000000000@0xfffffe9d8c223628"@/System/Volumes/Data/SWE/macOS/BuildRoots/d7e177bcf5/Library/Caches/com.apple.xbs/Sources/xnu/xnu-7195.141.2/osfmk/i386/pmap_internal.h:869 Backtrace (CPU 0), Frame : Return Address 0xffffffb0c7103750 : 0xffffff801ea8e04d 0xffffffb0c71037a0 : 0xffffff801ebd4e13 0xffffffb0c71037e0 : 0xffffff801ebc540a 0xffffffb0c7103830 : 0xffffff801ea32a2f 0xffffffb0c7103850 : 0xffffff801ea8d86d 0xffffffb0c7103970 : 0xffffff801ea8db63 0xffffffb0c71039e0 : 0xffffff801f29dc0a 0xffffffb0c7103a50 : 0xffffff801eba3da0 0xffffffb0c7103b80 : 0xffffff801eb240db 0xffffffb0c7103c00 : 0xffffff801eb22b4c 0xffffffb0c7103c80 : 0xffffff801eb2689a 0xffffffb0c7103f00 : 0xffffff801ebc5a20 0xffffffb0c7103fa0 : 0xffffff801ea3291f Process name corresponding to current thread: soffice Boot args: chunklist-security-epoch=0 -chunklist-no-rev2-dev Mac OS version: 20G80 Kernel version: Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 Kernel UUID: FECBF22B-FBBE-36DE-9664-F12A7DD41D3D KernelCache slide: 0x000000001e800000 KernelCache base: 0xffffff801ea00000 Kernel slide: 0x000000001e810000 Kernel text base: 0xffffff801ea10000 __HIB text base: 0xffffff801e900000 System model name: MacBookPro16,2 (Mac-5F9802EFE386AA28) System shutdown begun: NO Hibernation exit count: 0 System uptime in nanoseconds: 677813363453169 Last Sleep: absolute base_tsc base_nano Uptime : 0x00026877b8c0b127 Sleep : 0x0001a28aca2f5c41 0x00036df8756d35a5 0x0001a286e38e79eb Wake : 0x0001a28acd3255cc 0x00036e25c0f6da5d 0x0001a28acb72bb9a last started kext at 627837699295207: >!UAudio 405.39 (addr 0xffffff7fb95ac000, size 315392) last stopped kext at 627897720245425: >!UAudio 405.39 (addr 0xffffff7fb95ac000, size 315392) loaded kexts: fi.dungeon.driver.SATSMARTDriver 0.10.2 org.virtualbox.kext.VBoxNetAdp 6.1.22 org.virtualbox.kext.VBoxNetFlt 6.1.22 org.virtualbox.kext.VBoxUSB 6.1.22 org.virtualbox.kext.VBoxDrv 6.1.22 com.Cycling74.driver.Soundflower 2 |IO!BSerialManager 8.0.5d7 >AGPM 122.1 >X86PlatformShim 1.0.0 >!APlatformEnabler 2.7.0d0 @filesystems.autofs 3.0 @fileutil 20.036.15 >!ATopCaseHIDEventDriver 4050.1 >!AHIDALSService 1 >!AUpstreamUserClient 3.6.8 >!AGraphicsDevicePolicy 6.3.5 @AGDCPluginDisplayMetrics 6.3.5 >!A!IICLGraphics 16.0.5 >pmtelemetry 1 |IOUserEthernet 1.0.1 >usb.!UUserHCI 1 @Dont_Steal_Mac_OS_X 7.0.0 >!AHV 1 >!ADiskImages2 1 >!AGFXHDA 100.1.433 >!A!IPCHPMC 2.0.1 >!ABacklight 180.3 >!AMCCSControl 1.14 >!ABridgeAudio!C 140.4 >!AThunderboltIP 4.0.3 >!A!IICLLPGraphicsFramebuffer 16.0.5 >BridgeAudioCommunication 140.4 >!AAVEBridge 6.1 >!A!ISlowAdaptiveClocking 4.0.0 |SCSITaskUserClient 436.140.1 >BCMWLANFirmware4378.Hashstore 1 >BCMWLANFirmware4377.Hashstore 1 >BCMWLANFirmware4364.Hashstore 1 >BCMWLANFirmware4355.Hashstore 1 >!AFileSystemDriver 3.0.1 @filesystems.tmpfs 1 @filesystems.hfs.kext 556.100.11 @BootCache 40 @!AFSCompression.!AFSCompressionTypeZlib 1.0.0 @!AFSCompression.!AFSCompressionTypeDataless 1.0.0d1 @filesystems.apfs 1677.141.1 >!ABCMWLANBusInterfacePCIeMac 1 @private.KextAudit 1.0 >!ASmartBatteryManager 161.0.0 >!AACPIButtons 6.1 >!ASMBIOS 2.1 >!AACPIEC 6.1 >!AAPIC 1.7 @!ASystemPolicy 2.0.0 @nke.applicationfirewall 311 |IOKitRegistryCompatibility 1 |EndpointSecurity 1 >!UMergeNub 900.4.2 |IOUSBUserClient 900.4.2 |IOAVB!F 940.4 @plugin.IOgPTPPlugin 985.2 |IOEthernetAVB!C 1.1.0 @kext.triggers 1.0 >!AHIDKeyboard 224 >!AHS!BDriver 4050.1 >IO!BHIDDriver 8.0.5d7 >!AActuatorDriver 4440.3 >!AMultitouchDriver 4440.3 >!AInputDeviceSupport 4400.35 >!AGraphicsControl 6.3.5 |IO!BHost!CUARTTransport 8.0.5d7 |IO!BHost!CTransport 8.0.5d7 >!ABacklightExpert 1.1.0 |IONDRVSupport 585.1 >!ASMBus!C 1.0.18d1 |IOAudio!F 300.6.1 @vecLib.kext 1.2.0 >!AThunderboltDPOutAdapter 8.1.4 |IOAccelerator!F2 442.9 >!A!ILpssUARTv1 3.0.60 >!A!ILpssUARTCommon 3.0.60 >!AOnboardSerial 1.0 @!AGPUWrangler 6.3.5 @!AGraphicsDeviceControl 6.3.5 |IOGraphics!F 585.1 |IOSlowAdaptiveClocking!F 1.0.0 >X86PlatformPlugin 1.0.0 >IOPlatformPlugin!F 6.0.0d8 >usb.ethernet.asix 5.0.0 >usb.!UHub 1.2 >usb.IOUSBHostHIDDevice 1.2 >usb.cdc.ncm 5.0.0 >usb.cdc.ecm 5.0.0 >usb.cdc 5.0.0 >usb.networking 5.0.0 >usb.!UHostCompositeDevice 1.2 >!AThunderboltPCIDownAdapter 4.1.1 >!AThunderboltDPInAdapter 8.1.4 >!AThunderboltDPAdapter!F 8.1.4 >!AHPM 3.4.4 >!A!ILpssI2C!C 3.0.60 >!A!ILpssI2C 3.0.60 >!A!ILpssDmac 3.0.60 >!ABSDKextStarter 3 |IOSurface 290.8.1 @filesystems.hfs.encodings.kext 1 >!AXsanScheme 3 >usb.!UVHCIBCE 1.2 >usb.!UVHCICommonBCE 1.0 >usb.!UVHCI 1.2 >usb.!UVHCICommon 1.0 >!AEffaceableNOR 1.0 |IOBufferCopy!C 1.1.0 |IOBufferCopyEngine!F 1 |IONVMe!F 2.1.0 >!ABCMWLANCoreMac 1.0.0 |IOSerial!F 11 |IO80211!FV2 1200.12.2b1 |IOSkywalk!F 1 >mDNSOffloadUserClient 1.0.1b8 >IOImageLoader 1.0.0 >corecapture 1.0.4 >usb.!UHostPacketFilter 1.0 |IOUSB!F 900.4.2 >!AThunderboltNHI 7.2.8 |IOThunderbolt!F 9.3.2 >usb.!UXHCIPCI 1.2 >usb.!UXHCI 1.2 >!AEFINVRAM 2.1 >!AEFIRuntime 2.1 >!ASMCRTC 1.0 |IOSMBus!F 1.1 |IOHID!F 2.0.0 $!AImage4 3.0.0 |IOTimeSync!F 985.2 |IONetworking!F 3.4 >DiskImages 493.0.0 |IO!B!F 8.0.5d7 |IOReport!F 47 |IO!BPacketLogger 8.0.5d7 $quarantine 4 $sandbox 300.0 @kext.!AMatch 1.0.0d1 |CoreAnalytics!F 1 >!ASSE 1.0 >!AKeyStore 2 >!UTDM 511.141.1 |IOUSBMass!SDriver 184.140.2 |IOSCSIBlockCommandsDevice 436.140.1 |IO!S!F 2.1 |IOSCSIArchitectureModel!F 436.140.1 >!AMobileFileIntegrity 1.0.5 @kext.CoreTrust 1 >!AFDEKeyStore 28.30 >!AEffaceable!S 1.0 >!ACredentialManager 1.0 >KernelRelayHost 1 |IOUSBHost!F 1.2 >!UHostMergeProperties 1.2 >usb.!UCommon 1.0 >!ABusPower!C 1.0 >!ASEPManager 1.0.1 >IOSlaveProcessor 1 >!AACPIPlatform 6.1 >!ASMC 3.1.9 |IOPCI!F 2.9 |IOACPI!F 1.4 >watchdog 1 @kec.pthread 1 @kec.corecrypto 11.1 @kec.Libm 1