2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows PowerShellでssh-copy-idコマンドを使う

Posted at
  • Linuxにあるssh-copy-idをWindowsでもやりたくなったので、GPT-4に聞きながら関数を作って登録してみました。
  • 参考ページでは関数化まではしていなかったので、本記事では関数化して呼び出せるようにしました。

コード

$dir = Split-Path -Path $PROFILE
if (!(Test-Path -Path $dir)) {
    New-Item -ItemType Directory -Force -Path $dir
}

if (!(Test-Path -Path $PROFILE)) {
    New-Item -Type File -Path $PROFILE -Force
}

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Add-Content -Path $PROFILE -Value @"
function ssh-copy-id {
    param (
        [Parameter(Mandatory=`$true, ValueFromRemainingArguments=`$true)]
        [string[]]`$HostName
    )

    `$sshCommand = `"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys`"

    foreach (`$h in `$HostName) {
        cat ~/.ssh/id_rsa.pub | ssh `$h `$sshCommand
    }
}
"@

. $PROFILE

使い方

ssh-copy-id username@hostname
  • 同時に複数のホストへも公開キーを渡せます。
ssh-copy-id 'username1@hostname1' 'username2@hostname2' 'username3@hostname3'
  • ポートがデフォルト22番ではない場合、ssh configに記載してから実行してください
config
Host HostName1
    HostName hostname1
    Port 3000
    User username1
    IdentityFile ~/.ssh/id_rsa
ssh-copy-id HostName1

軽く解説

PROFILEがない場合は作成する

  • PROFILEとは.bash_aliasみたいなもの。
  • $PROFILE でPROFILEのパスを確認できるが、存在してなくてもパスが出てくるので、表示されたパスをlsで確認してみる。ない場合は以下を実行する。
$dir = Split-Path -Path $PROFILE
if (!(Test-Path -Path $dir)) {
    New-Item -ItemType Directory -Force -Path $dir
}

if (!(Test-Path -Path $PROFILE)) {
    New-Item -Type File -Path $PROFILE -Force
}

スクリプト実行ポリシーを RemoteSigned または Unrestricted に変更する

  • RemoteSigned は、ローカルコンピュータ上で作成されたスクリプトは実行を許可し、インターネットからダウンロードしたスクリプトはデジタル署名が必要となるポリシー

  • Unrestricted はすべてのスクリプトを実行するポリシー

  • 以下で権限を確認

    • 私の場合、Restrictedになっていたので、権限を変更しました。
Get-ExecutionPolicy
  • 権限をUnrestricted に変更
Set-ExecutionPolicy Unrestricted -Scope CurrentUser

ssh-copy-idという関数をPROFILEに登録する

Add-Content -Path $PROFILE -Value @"
function ssh-copy-id {
    param (
        [Parameter(Mandatory=`$true, ValueFromRemainingArguments=`$true)]
        [string[]]`$HostName
    )

    `$sshCommand = `"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys`"

    foreach (`$h in `$HostName) {
        cat ~/.ssh/id_rsa.pub | ssh `$h `$sshCommand
    }
}
"@

PROFILEを再読み込みする

. $PROFILE

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?