0
scp
cli 도구에 대한 단순한 래퍼 인 간단한 scp
함수가 있습니다.동일한 하위 프로세스에 두 번 쓰기 golang
type credential struct {
username string
password string
host string
port string
}
func scpFile(filepath, destpath string, c *credential) error {
cmd := exec.Command("scp", filepath, c.username+"@"+c.host+":"+destpath)
if err := cmd.Run(); err != nil {
return err
}
fmt.Println("done")
return nil
}
이제는 scp에 필요한 경우 SSH 암호를 넣을 수있는 기능을 추가하고 싶습니다. 이것은 내가 생각해 낸 것입니다
func scpFile(filepath, destpath string, c *credential) error {
cmd := exec.Command("scp", filepath, c.username+"@"+c.host+":"+destpath)
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
defer stdin.Close()
if err := cmd.Start(); err != nil {
return err
}
io.WriteString(stdin, c.password+"\n")
cmd.Wait()
fmt.Println("done")
return nil
}
비밀번호 프롬프트가 멈추기 때문에 작동하지 않습니다. 나는에 글을 쓰려고하기 전에 1 초의 수면을 추가하려고 시도했다. 어쩌면 내가 빨리 암호를 쓰려고했지만 어리석은 짓을하지 않았다.
있다가, 그것은 [단지 일반적으로 암호를 읽지 않습니다 ] (http://stackoverflow.com/questions/1340366/how-to-make-ssh-receive-the-password-from-stdin). 다양한 보안 고려 사항이 있으므로 세부 사항을 확인하십시오. – nothingmuch
'scp'는 단지'ssh'를 전송 수단으로 사용하는 유틸리티입니다. ssh와 같은 방식으로 자동화하십시오. 공개 키 인증을 사용하는 것이 더 바람직합니다. – JimB