본문 바로가기
OS-OE Knowledge/Windows KB

PowerShell/Linux Host에 ssh 통해 명령 수행하기

by 스쳐가는인연 2016. 10. 7.

Powershell에서 ssh를 이용하기 위한 방법 중 아래 모듈을 이용해 보았다.


Posh-SSH PowerShell SSH Module 1.7.6

https://www.powershellgallery.com/packages/Posh-SSH/1.7.6

https://msdn.microsoft.com/powershell/gallery/readme


Installation

- Powershell 버전에 따라 수행 가능한 명령이 조금씩 다른 듯 하다.

Run below command on PS

PS> iex (New-Object Net.WebClient).DownloadString("https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev")


or

PS> wget https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev | iex


or

PS> Install-Module -Name Posh-SSH -RequiredVersion 1.7.6



Command Lists

PS> Get-Command -Module Posh-SSH

- 수행 가능 명령어 보기


New Connection

PS> New-SSHSession -ComputerName "192.168.0.10" -Credential (Get-Credential jade)

- 특정 호스트에 접속하기(IP 또는 호스트 명으로 접속)

 

Run Command

PS> Invoke-SSHCommand -Index 0 -Command "uname -a"

PS> Invoke-SSHCommand -Index 0 -Command "uname -a; cd /; pwd; ls -l"

- 대상 호스트에 특정 명령 수행하기


Disconnect

Remove-SSHSession -Index 0 -Verbose

- 접속 종료하기




응용편

- Powershell Script를 수행하여 명령어 수행 자동화(?) 해보기,

- 수행 시, 호스트, 사용자 계정에 대한 입력 받기


'#' 주석


TestScript.ps1

------------------------------------------

# Param statement must be first non-comment, non-blank line in the script

# 호스트 정보와 사용자 계정 정보 입력 받기 위한 변수 설정

Param(

    [Parameter(Mandatory=$True)]

    [alias("h")]

    $strHostp,


    [Parameter(Mandatory=$True)]

    [alias("u")]

    $strUserp,


    [Parameter(Mandatory=$True)]

    [alias("p")]

    $strPwdp

)


# Varify parameter

# 입력받은 정보 확인

#Write-Host $strHostp

#Write-Host $strUserp

#Write-Host $strPwdp


# 이용할 모듈 정보

Import-Module Posh-SSH


# 호스트 정보 및 사용자 계정 정보를 입력 받지않는/필요없는 경우 직접 기록해 둘 수 있겠다.

# Set Host Information - Hostname or IP Address

#$strHost = "192.168.0.1" or " Hostname"

$strHost = $strHostp


# Set Username

#$strUser = "jade"

$strUser = $strUserp


# Set Password

#$StrPwd = ConvertTo-SecureString -String “Password” -AsPlainText -Force

$StrPwd = ConvertTo-SecureString -String $strPwdp -AsPlainText -Force


# Set Credential

#$strCredential = New-Object System.Management.Automation.PSCredential ($strUser, $strPwd)

$strCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist $strUser, $strPwd


# Create SSH Session

# 대상 장치에 접속하기

$strSSHSession = New-SSHSession -ComputerName $strHost -Credential $strCredential -AcceptKey:$true #-Port 22

 

# Run Command

# 필요한 명령 수행하기

Invoke-SSHCommand -Index 0 -Command "uname -a"

 

# 작업 종료 후 접속 자동 종료하기

# Delete Session Information

Remove-SSHSession -SSHSession $strSSHSession

Remove-variable strSSHSession

------------------------------------------


PS> .\TestScript.ps1



Host       : 192.168.0.10

Output     : {Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Thu Jan 29 18:37:38 EST 2015 x86_64 x86_64 x86_6

             4 GNU/Linux}

ExitStatus : 0


True


PS> .\TestScript.ps1 -h 192.168.0.10 -u jade -p password



Host       : 192.168.0.10

Output     : {Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Thu Jan 29 18:37:38 EST 2015 x86_64 x86_64 x86_6

             4 GNU/Linux}

ExitStatus : 0


True




참고자료

http://www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module/

http://www.get-virtual.info/2015/06/30/invoking-ssh-commands-using-powershell-kinda/

https://blogs.technet.microsoft.com/heyscriptingguy/2012/08/11/weekend-scripter-use-the-windows-task-scheduler-to-run-a-windows-powershell-script/

반응형