현재 다음과 같은 자동화된 SSH 스크립트 코드가 있습니다.
#!/usr/bin/expect -f
set pw "mypass"
spawn ssh [email protected]
expect "Password:"
send "$pw\r"
expect "Verification code:"
send "/usr/local/bin/authtool --totp --base32 $(sed -n '/^secret=/s///p' ~/.Auth.sc)\r"
기본적으로 2단계 로그인 프로세스가 있습니다. 첫 번째는 비밀번호(작동함)이고, 두 번째는 인증(작동하지 않음)입니다.
sed 부분에 도달할 때마다 다음이 반환됩니다.
can't read "(sed -n '/^secret=/s///p' ~/.Auth.sc)": no such variable
while executing
어떻게 해야할지 모르겠지만 백슬래시와 이스케이프 처리와 관련이 있는 것으로 의심됩니다. 나는 올바른 길을 가고 있습니까?
답변1
in 은 Tcl
동일 [...]
하므로 $(...)
코드를 다음과 같이 작성해야 합니다.
send "/usr/local/bin/authtool --totp --base32 [exec sed -n '/^secret=/s///p' $::env(HOME)/.Auth.sc]\r"
답변2
이 시도,
기본적으로 expect
스크립트의 코드 부분은 다음과 같습니다.
send "/usr/local/bin/authtool --totp --base32 $(sed -n '/^secret=/s///p' ~/.Auth.sc)\r"
예상되는 변수로 취급되지만 $(sed -n '/^secret=/s///p' ~/.Auth.sc)
실제로는 그렇지 않습니다.
그러니 이것을 시도해 보세요. 즉, 탈출하세요.$
(
)
send "/usr/local/bin/authtool --totp --base32 \$\(sed -n '/^secret=/s///p' ~/.Auth.sc\)\r"
아니면 백틱을 사용해 보세요.
send "/usr/local/bin/authtool --totp --base32 `sed -n '/^secret=/s///p' ~/.Auth.sc`\r"