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/