"Mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công" [Đã giải quyết]
Một khi các vấn đề phổ biến nhất gây khó khăn cho các quản trị viên hệ thống Windows đều được tin cậy, các máy tính Active Directory dường như đã bị loại khỏi miền. Lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” khét tiếng là quá phổ biến.
Trong hướng dẫn này, bạn sẽ tìm hiểu mọi thủ thuật mà tôi đã gặp trong hơn 20 năm quản lý Active Directory và cách tự động hóa nó bằng PowerShell.
“Mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” Thông báo lỗi
Khi miền AD không còn tin cậy máy tính nữa, rất có thể đó là do mật khẩu của máy tính cục bộ không khớp với mật khẩu được lưu trong Active Directory.
Hai mật khẩu phải được đồng bộ hóa để AD tin tưởng vào máy tính. Nếu chúng không đồng bộ hóa, bạn sẽ nhận được thông báo lỗi khét tiếng “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công“.
Thật không may, chưa bao giờ có một giải pháp duy nhất mà tôi và các quản trị viên hệ thống khác tìm thấy có hiệu quả 100%. Đó là lý do tại sao tôi viết hướng dẫn này.
Hướng dẫn này nhằm mục đích trở thành một kho lưu trữ duy nhất cho mọi cách duy nhất để khắc phục sự cố này một lần và mãi mãi cũng như để tự động hóa quy trình với PowerShell.
Mật khẩu tài khoản máy tính Active Directory
Khi một máy tính mới được thêm vào Active Directory, một tài khoản máy tính sẽ được tạo bằng mật khẩu. Theo mặc định, mật khẩu đó có hiệu lực trong 30 ngày. Sau 30 ngày nó sẽ tự động thay đổi. Nếu nó thay đổi và mật khẩu máy khách không thay đổi, bạn sẽ nhận được thông báo lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công”.
Xem chính sách hiện có
Bạn có thể xem chính sách trên toàn miền bằng cách mở Bảng điều khiển quản lý chính sách nhóm (GPMC). Bên trong GPMC, nhấp vào Chính sách miền mặc định và điều hướng đến Cấu hình máy tính -> Cài đặt Windows -> Cài đặt bảo mật > Chính sách cục bộ > Tùy chọn bảo mật.
Khi ở trong Tùy chọn bảo mật, hãy tìm chính sách có tên Thành viên miền: Tuổi mật khẩu tài khoản máy tối đa.
Trên máy tính đã tham gia AD, hãy mở regedit và điều hướng đến khóa đăng ký HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters và tìm ở giá trị MaximumPasswordAge như hiển thị bên dưới.
Khi ở đó, bạn có thể vô hiệu hóa việc thay đổi mật khẩu của máy tính cục bộ bằng cách đặt giá trị DisablePasswordChange thành 1.
Khi tài khoản máy tính thay đổi, cả máy tính cục bộ và tài khoản máy tính AD sẽ cùng nhau thay đổi mật khẩu. AD biết cái hiện tại và cái trước đó trong trường hợp chúng không đồng bộ trong một khoảng thời gian ngắn.
Quy trình thay đổi mật khẩu tài khoản máy tính
Khi mọi thứ hoạt động bình thường, bằng cách sử dụng dịch vụ Netlogon Windows, máy tính sẽ tự động bắt đầu thay đổi mật khẩu. Điều này xảy ra trong quá trình khởi động lại máy tính hoặc khi đối tượng máy tính cần xác thực với AD.
Sử dụng dịch vụ Netlogon Windows, máy tính cục bộ sẽ bắt đầu một chuỗi thay đổi mật khẩu. Đầu tiên, máy tính sẽ bắt đầu thay đổi mật khẩu trên bộ điều khiển miền. Nếu thành công, nó sẽ cố gắng thay đổi mật khẩu cục bộ để khớp với khóa đăng ký HKLM\SECURITY\Policy\Secrets
Thông thường, quá trình này hoạt động tốt ngay cả khi máy tính bị tắt hoặc ngoại tuyến lâu hơn 30 ngày do máy tính cục bộ bắt đầu thay đổi mật khẩu.
Tuy nhiên, một vấn đề xảy ra khi:
- máy tính thay đổi tài khoản máy tính AD nhưng không thể thay đổi mật khẩu cục bộ
- máy tính được tạo lại mà không chạy Sysprep
- Hệ điều hành được cài đặt lại và đang cố gắng xác thực bằng tài khoản máy tính AD cũ, đã được bật
- …và hơn thế nữa?
Nếu bất kỳ điều nào ở trên xảy ra, bạn sẽ thấy thông báo lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công”.
Xác minh vấn đề
Một khi bạn biết vấn đề tồn tại, làm cách nào để tái tạo nó hoặc ít nhất có một phương pháp để xác định máy tính nào gặp vấn đề? Bạn có thể thử đăng nhập tương tác vào từng máy tính nhưng điều đó không thể mở rộng được và tôi không muốn đứng dậy khỏi bàn làm việc của mình!
Hãy xây dựng một tập lệnh mà chúng ta có thể chạy cả cục bộ và từ xa để xác định máy tính nào trong miền gặp sự cố này nhằm xóa vĩnh viễn thông báo lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính”.
Trước hết, vì bạn cho rằng xác thực miền không hoạt động nên bạn cần biết tài khoản người dùng cục bộ trong nhóm quản trị viên. Tôi hy vọng bạn biết mật khẩu quản trị viên cục bộ của bạn!
nltest (Công cụ dòng lệnh)
nltest là một công cụ dòng lệnh cổ điển dùng để kiểm tra mối quan hệ tin cậy trên máy tính. Công cụ này được cài đặt khi bạn cài đặt RSAT hoặc có sẵn trực tiếp trên bộ điều khiển miền.
Bạn có thể xác minh mối quan hệ tin cậy trên máy tính khi đăng nhập vào máy tính bằng cách chạy:
> nltest /sc_verify:<your domain FQDN>CẢNH BÁO: Phương pháp này không được khuyến khích vì nltest chỉ hoạt động trong ngữ cảnh người dùng nơi nó được khởi chạy. Nếu máy tính bị mất niềm tin và bạn đăng nhập với tư cách người dùng cục bộ, máy tính sẽ cố gắng kết nối với miền bằng thông tin xác thực của người dùng cục bộ. Điều này dẫn đến lỗi từ chối truy cập.
netdom (Công cụ dòng lệnh)
netdom là một công cụ dòng lệnh khác mà bạn có thể sử dụng để xác minh mối quan hệ tin cậy. Công cụ này cũng được cài đặt khi bạn cài đặt RSAT hoặc có sẵn trực tiếp trên bộ điều khiển miền.
Bạn có thể xác minh độ tin cậy bằng cách sử dụng netdom verify bằng cách cung cấp:
- tên của tên máy tính để xác minh
- FQDN của tên miền
- tên người dùng để xác thực yêu cầu
- mật khẩu của tài khoản người dùng
Dưới đây là một ví dụ:
> netdom verify MYCOMPUTER /Domain:domain.local /UserO:abertram /PasswordO:*Bằng cách cung cấp giá trị * cho tham số PasswordO, netdom sẽ nhắc nhập mật khẩu.
Kiểm tra-ComputerSecureChannel (PowerShell)
Một trong những cách tốt nhất để giải quyết vấn đề “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” là sử dụng lệnh ghép ngắn Test-ComputerSecureChannel. Lệnh ghép ngắn PowerShell này đi kèm với Windows 10 và dễ sử dụng hơn.
Lệnh ghép ngắn Test-ComputerSecureChannel hoạt động cục bộ trên máy tính Windows 10. Khi đăng nhập vào máy tính một cách tương tác, hãy mở bảng điều khiển PowerShell và chạy Test-ComputerSecureChannel mà không có bất kỳ tham số nào. Nó sẽ trả về Đúng hoặc Sai tùy thuộc vào mức độ tin cậy có hợp lệ hay không.
PS51> Test-ComputerSecureChannel
TrueBạn cũng có thể chỉ định một bộ điều khiển miền cụ thể để xác nhận mật khẩu được đồng bộ hóa bằng cách sử dụng tham số Server.
PS51> Test-ComputerSecureChannel -Server 'DC.domain.local'
FalseLệnh ghép ngắn này dễ sử dụng và có tùy chọn Sửa chữa nhưng chúng tôi sẽ lưu phần trình diễn về điều đó cho phần sửa lỗi.
Nếu bạn biết mật khẩu quản trị viên cục bộ của những máy tính mà bạn muốn kiểm tra và tính năng Từ xa PowerShell được bật trên chúng, bạn cũng có thể sử dụng lệnh ghép ngắn Invoke-Command. Bằng cách sử dụng lệnh ghép ngắn Invoke-Command, bạn có thể chạy Test-ComputerSecureChannel từ xa trên một hoặc nhiều máy tính cùng một lúc.
PS51> Invoke-Command -ComputerName PC1, PC2, PC3 -ScriptBlock { Test-ComputerSecureChannel }Kiểm tra hàng loạt mối quan hệ tin cậy
Bây giờ bạn đã biết cách kiểm tra từ xa mối quan hệ tin cậy, đây là đoạn mã bạn có thể sử dụng để kiểm tra tất cả máy tính AD của mình! Trong tập lệnh này, trước tiên tôi sẽ kiểm tra để đảm bảo máy tính đang trực tuyến. Nếu không, nó sẽ trả về Ngoại tuyến. Nếu vậy, nó sẽ chạy Test-ComputerSecureChannel trên mỗi máy tính và trả về True hoặc False.
$localCredential = Get-Credential
@(Get-AdComputer -Filter *).foreach({
$output = @{ ComputerName = $_.Name }
if (-not (Test-Connection -ComputerName $_.Name -Quiet -Count 1)) { $output.Status = 'Offline'
} else {
$trustStatus = Invoke-Command -ComputerName $_.Name -ScriptBlock { Test-ComputerSecureChannel } -Credential $localCredential
$output.Status = $trustStatus
}
[pscustomobject]$output
})Biết và hiểu vấn đề là bước đầu tiên nhưng bạn khắc phục nó như thế nào? Bây giờ bạn biết rằng bạn cần lấy tài khoản máy tính được lưu trữ trên máy tính cục bộ giống với tài khoản máy tính được lưu trữ trong AD.
Hiện có rất nhiều “giải pháp” khác nhau cho vấn đề “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công”. Các giải pháp này có thể được thực hiện thông qua GUI, qua PowerShell hoặc thông qua các công cụ dòng lệnh kiểu cũ.
- Đặt lại mật khẩu tài khoản máy tính trong AD
- Đặt lại mật khẩu tài khoản máy tính cục bộ
- Hủy kết nối và tham gia lại máy tính Windows
- Xóa hoàn toàn tài khoản máy tính và kết nối lại máy tính Windows
Đó là rất nhiều lựa chọn! Trong hướng dẫn này, chúng tôi sẽ tập trung vào việc khắc phục sự cố này bằng PowerShell và các công cụ dòng lệnh (để hoàn thiện). Nếu bạn chưa sử dụng PowerShell thì bạn nên làm như vậy!
Khắc phục sự cố: Đặt lại mật khẩu máy tính
netdom (Công cụ dòng lệnh)
Một sự tin cậy có thể được sửa chữa và thông báo lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” có thể được loại bỏ bằng cách sử dụng công cụ dòng lệnh netdom kiểu cũ. Nếu bạn đăng nhập cục bộ vào máy tính với tư cách là người dùng quản trị, bạn có thể chạy netdom resetpwd để bắt đầu trình tự đặt lại mật khẩu như hiển thị bên dưới.
Trong ví dụ này:
- DC là tên của bộ điều khiển miền
- abertram là tên tài khoản người dùng Active Directory có quyền reset tài khoản máy tính
- * là trình giữ chỗ cho mật khẩu tài khoản người dùng sẽ nhắc nhập mật khẩu.
> netdom resetpwd /s:DC /ud:abertram /pd:*Đặt lại mật khẩu máy tính (PowerShell)
Một trong những cách tốt nhất để khắc phục mối quan hệ tin cậy là sử dụng lệnh ghép ngắn Reset-ComputerMachinePassword. Lệnh ghép ngắn này được chạy trên máy tính cục bộ và sẽ bắt đầu trình tự đặt lại mật khẩu. Cú pháp của nó không thể đơn giản hơn.
PS51> Reset-ComputerMachinePasswordNếu muốn chỉ định một DC cụ thể để đặt lại, bạn có thể chỉ định nó bằng tham số Server cùng với thông tin xác thực tùy chọn (nó sẽ mặc định là người dùng cục bộ).
Ví dụ dưới đây sẽ nhắc nhập tên người dùng và mật khẩu AD và cố gắng đặt lại mật khẩu trên máy tính cục bộ và bộ điều khiển miền DC.
PS51> Reset-ComputerMachinePassword -Server DC -Credential (Get-Credential)Điều này cũng có thể được chạy từ xa bằng cách sử dụng Invoke-Command nếu PowerShell Remote có sẵn trên máy tính. Dưới đây, tôi đang lấy tên người dùng và mật khẩu cho tài khoản quản trị viên cục bộ trên máy tính. Tôi cũng đang nhận được thông tin xác thực có quyền đặt lại mật khẩu tài khoản AD của máy tính này. Sau đó, tôi chuyển $domainCredential vào phiên từ xa bằng cách sử dụng cấu trúc $using.
$localAdminCredential = Get-Credential
$domainCredential = Get-Credential
PS51> Invoke-Command -Computername MYCOMPUTER -Credential $localAdminCredential -ScriptBlock { Reset-ComputerMachinePassword -Server DC -Credential $using:domainCredential }Lưu ý rằng điều này cũng hoạt động ngay cả khi tài khoản máy tính đã bị xóa khỏi Active Directory. Tạo một tài khoản máy tính có cùng tên và
Reset-ComputerMachinePasswordsẽ đảm bảo mật khẩu được đồng bộ hóa.
Đặt lại hàng loạt mật khẩu tài khoản máy tính cục bộ
Bạn muốn xử lý lỗi “không thành công trong mối quan hệ tin cậy giữa máy trạm này và miền chính” trên nhiều máy tính cùng một lúc? Không có gì. Bằng cách sử dụng vòng lặp foreach tiện dụng, chúng tôi cũng có thể chạy hàng loạt Reset-ComputerMachinePassword.
$localAdminCredential = Get-Credential
$domainCredential = Get-Credential
@(Get-AdComputer -Filter *).foreach({
$output = @{ ComputerName = $_.Name }
if (-not (Test-Connection -ComputerName $_.Name -Quiet -Count 1)) { $output.Status = 'Offline'
} else {
$pwChangeOutput = Invoke-Command -Computername $_.Name -Credential $localAdminCredential -ScriptBlock { Reset-ComputerMachinePassword -Server DC -Credential $using:domainCredential }
$output.PasswordChangeOutput = $pwChangeOutput
}
[pscustomobject]$output
})Kiểm tra-ComputerSecureChannel -Repair (PowerShell)
Một cách khác để bắt đầu quá trình thay đổi mật khẩu là chạy Test-ComputerSecureChannel nhưng lần này hãy sử dụng tùy chọn Repair. Theo những gì tôi được biết, quy trình này giống hệt với việc sử dụng Reset-ComputerMachinePassword. Trên bảng điều khiển máy tính, hãy sử dụng tham số Repair và tham số Credential.
PS51> Test-ComputerSecureChannel -Repair -Credential (Get-Credential)Đảm bảo luôn sử dụng thông số Thông tin xác thực tại đây. Nếu không, tương tự như tiện ích nltest, nó sẽ cố gắng sử dụng tài khoản cục bộ và không hoạt động.
Sửa chữa hàng loạt mối quan hệ tin cậy
Hãy thả lệnh này vào vòng lặp foreach tiện dụng mà chúng tôi đang sử dụng và Bob là chú của bạn!
$localAdminCredential = Get-Credential
$domainCredential = Get-Credential
@(Get-AdComputer -Filter *).foreach({
$output = @{ ComputerName = $_.Name }
if (-not (Test-Connection -ComputerName $_.Name -Quiet -Count 1)) { $output.Status = 'Offline'
} else {
$repairOutput = Invoke-Command -Computername $_.Name -Credential $localAdminCredential -ScriptBlock { Test-ComputerSecureChannel -Repair -Credential $using:domainCredential }
$output.RepairOutput = $repairOutput
}
[pscustomobject]$output
})Khắc phục sự cố: Gia nhập lại miền
Nếu việc đặt lại mật khẩu tài khoản máy tính không hiệu quả với bạn, thì luôn có tùy chọn hạt nhân. Bạn có thể nối lại máy tính vào miền Active Directory. Mặc dù không phải lúc nào cũng cần thiết nhưng đã có lúc tôi phải sử dụng phương pháp này.
Lưu ý rằng tôi đã nghe một số báo cáo rằng việc tách rời là không cần thiết. Bạn có thể thoát khỏi bằng cách buộc tham gia mới. YMMV.
Bạn có thể:
- đăng nhập vào máy tính thông qua tài khoản quản trị cục bộ
- đi tới Thuộc tính hệ thống
- nhấp vào Thay đổi
- đặt nó vào một nhóm làm việc
- khởi động lại
- đặt nó trở lại miền
Hãy chú ý cách tôi đề cập đến có thể. Đừng làm điều này. Thật lãng phí thời gian khi bạn có thể tự động hóa nó bằng PowerShell.
Tôi nhận thấy có hai cách mà bạn có thể sử dụng PowerShell để hủy tham gia miền và sử dụng PowerShell để tham gia miền.
Sử dụng CIM
Bạn có thể tham gia một miền bằng PowerShell (và hủy tham gia miền đó) bằng cách sử dụng lớp CIM Win32_ComputerSystem. Lớp này có hai phương thức cho phép bạn hủy tham gia và kết nối máy tính với miền có tên là UnJoinDomainOrWorkgroup() và JoinDomainOrWorkGroup.
Vì đây là CIM nên bạn có thể chạy nó từ xa một cách dễ dàng nhất có thể tại địa phương. Vì tôi cho rằng bạn muốn chạy tính năng này từ xa một cách thoải mái trên bàn làm việc của mình nên đây là đoạn mã thực hiện điều đó.
Lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” đã biến mất!
$computername = 'PITA'
$instance = Get-CimInstance -ComputerName $computername -ClassName 'Win32_ComputerSystem'
$invCimParams = @{
MethodName = 'UnjoinDomainOrWorkGroup'
Arguments = @{ FUnjoinOptions=0;Username="Administrator";Password="mypassword" }
}
$instance | Invoke-CimMethod @invCimParamsLưu ý tham số FUnjoinOptions ở trên. Tôi đã chọn chỉ định 4 ở đây. Điều này thực hiện hành vi mặc định khi hủy kết nối máy tính theo cách thủ công. Tùy chọn này vô hiệu hóa tài khoản máy tính trong Active Directory (nếu có thể tìm thấy). Nếu bạn không muốn có hành vi này, bạn có thể sử dụng tùy chọn 0 tại đây.
Khi máy tính đã được hủy kết nối, bạn có thể kết nối lại miền bằng phương thức JoinDomainOrWorkGroup().
$computername = 'PITA'
$instance = Get-CimInstance -ComputerName $computername -ClassName 'Win32_ComputerSystem'
$invCimParams = @{
MethodName = 'JoinDomainOrWorkGroup'
Arguments = @{ FJoinOptions=3;Name=mydomain.local;Username="mydomain\domainuser";Password="mypassword" }
}
$instance | Invoke-CimMethod @invCimParamsLưu ý tham số FJoinOptions ở trên. Tôi đã chọn chỉ định 3 ở đây. Điều này thực hiện hành vi mặc định khi kết nối máy tính theo cách thủ công. Tùy chọn này tạo một tài khoản máy tính AD. Bạn có thể tìm thấy một số tùy chọn khác như thêm vào một OU cụ thể thông qua tài liệu JoinDomainOrWorkgroup.
MẸO: Bạn cũng có thể hủy kết nối và kết nối lại nhiều máy tính cùng lúc bằng phương pháp này bằng cách chỉ định nhiều máy tính thông qua tham số
ComputerNametrênGet-CimInstance.
Sử dụng lệnh ghép ngắn loại bỏ máy tính và thêm máy tính
Bạn cũng có thể sử dụng lệnh ghép ngắn PowerShell tích hợp để hủy kết nối và kết nối máy tính với miền bằng PowerShell. Bạn có thể sử dụng lệnh ghép ngắn Remove-Computer và Add-Computer.
Để hủy kết nối máy tính bằng PowerShell, hãy đăng nhập vào bảng điều khiển máy tính và sử dụng lệnh ghép ngắn Remove-Computer. Cung cấp thông tin xác thực tên miền với quyền hủy kết nối máy tính. Bạn cũng có thể chỉ định tham số Khởi động lại để buộc khởi động lại sau khi hủy tham gia và Buộc không nhắc xác nhận.
PS51> Remove-Computer -UnjoinDomaincredential (Get-Credential) -Restart -ForceSau khi máy tính đã được khởi động lại, bạn có thể sử dụng lệnh ghép ngắn Thêm máy tính để kết nối máy tính với miền bằng PowerShell. Bạn có thể sử dụng lệnh ghép ngắn Thêm máy tính từ xa bằng cách cung cấp tham số ComputerName. Bạn cũng sẽ sử dụng thông tin xác thực của người dùng cục bộ để tạo kết nối và thông tin xác thực tên miền để xác thực tên miền.
Khi nó hoạt động trở lại, chúng tôi hy vọng bạn không còn nhận được thông báo lỗi “mối quan hệ tin cậy giữa máy trạm này và miền chính”.
$localCredential = Get-Credential
$domainCredential = Get-Credential
Add-Computer -ComputerName PITA -LocalCredential $localCredential -DomainName domain.local -Credential $domainCredential -Restart -ForceTên miền tự động Hủy tham gia và tham gia lại
Vì phải thực hiện quá trình này quá nhiều lần nên tôi đã xây dựng tập lệnh PowerShell để thực hiện mọi thứ cho bạn. Nếu bạn cung cấp cho nó tên của máy tính, nó sẽ:
- Hủy kết nối máy tính
- Khởi động lại và đợi để hoạt động trở lại
- Tham gia vào máy tính
- Khởi động lại và đợi để hoạt động trở lại
Bạn có thể thử tập lệnh này thông qua GitHub.
Bản tóm tắt
Bây giờ bạn đã hiểu đầy đủ về vấn đề và có nhiều giải pháp cho thông báo lỗi “Mối quan hệ tin cậy giữa máy trạm này và miền chính không thành công” . Tôi hy vọng hướng dẫn này cung cấp cho bạn một số hiểu biết sâu sắc và cho phép bạn đưa ra một số giải pháp của riêng mình cho vấn đề máy tính bị mất miền!
Đọc thêm
Hãy chắc chắn kiểm tra một số bài viết liên quan khác!
- Có rất nhiều tập lệnh Active Directory: Hãy đến và tải nó!
- Get-AdUser: Tìm người dùng Active Directory bằng PowerShell
- Cách đồng bộ hóa AD bằng PowerShell và tệp CSV